C# 子窗口刷新父窗口

本文介绍了一个简单的应用程序中子窗口的弹出及关闭后父窗口的刷新操作实现方式。通过创建TaskSchedulerSettingform实例并使用ShowDialog方法显示为模态对话框,确保用户在关闭子窗口前无法与主窗口交互。子窗口关闭时触发TaskSchedulerSetting_FormClosed事件,该事件中调用父窗口的RefreshControls方法来更新界面。


// 弹出子窗口
TaskSchedulerSetting form = new TaskSchedulerSetting();
form.Owner = this;
form.ShowDialog();


// 刷新父窗口
private void TaskSchedulerSetting_FormClosed(object sender, FormClosedEventArgs e)
{
    TaskSchedulerPanel panel;
    panel = (TaskSchedulerPanel)this.Owner;
    panel.RefreshControls();
}

C#实现窗口更新父窗口有多种方法,以下为具体介绍及示例: ### 委托方法 通过委托在窗口触发事件,使父窗口执行相应操作。 示例代码: ```csharp // 窗口 SubForm public partial class SubForm : Form { public SubForm() { InitializeComponent(); } public delegate void updateParentData(object sender); public event updateParentData updateIt; private void button1_Click(object sender, EventArgs e) { if (this.updateIt != null) { updateIt(null); } } } // 父窗口 MainForm public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void button_add_Click(object sender, EventArgs e) { SubForm subform = new SubForm(); subform.updateIt += new SubForm.updateParentData(doSomething); subform.ShowDialog(); } void doSomething(object sender) { // 进行数据操作 } } ``` 此方法中,窗口定义委托和事件,父窗口订阅事件并实现具体方法,当窗口触发事件父窗口对应方法会执行[^1]。 ### 直接访问父窗口实例 窗口直接访问父窗口实例并调用其公共方法。 示例代码: ```csharp // 窗口 PointManage m = new PointManage(); m = (PointManage)this.Owner; m.refreshbookinfo(""); // 父窗口 public partial class PointManage : Form { public PointManage() { InitializeComponent(); } public void refreshbookinfo(string param) { // 刷新操作 } } ``` 这里窗口通过`this.Owner`获取父窗口实例,调用父窗口的公共方法`refreshbookinfo`来更新数据,父窗口的该方法需设置为`public` [^2]。 ### 传递父窗口引用 在创建窗口父窗口引用传递给窗口窗口使用该引用调用父窗口方法。 示例代码: ```csharp // 父窗口 Form4 public partial class Form4 : Form { public Form4() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form5 form5 = new Form5(this); form5.Show(); } } // 窗口 Form5 public partial class Form5 : Form { private Form4 parentForm; public Form5(Form4 parent) { InitializeComponent(); parentForm = parent; } private void someMethod() { // 调用父窗口方法 parentForm.StrLabel1 = "New Value"; } } ``` 父窗口创建窗口将自身引用传递给窗口窗口保存该引用并在需要调用父窗口的属性或方法 [^3]。 ### 利用`FormClosed`事件 在窗口关闭触发父窗口刷新操作。 示例代码: ```csharp // 弹出窗口 TaskSchedulerSetting form = new TaskSchedulerSetting(); form.Owner = this; form.ShowDialog(); // 刷新父窗口 private void TaskSchedulerSetting_FormClosed(object sender, FormClosedEventArgs e) { TaskSchedulerPanel panel; panel = (TaskSchedulerPanel)this.Owner; panel.RefreshControls(); } ``` 父窗口弹出窗口设置`Owner`,并在窗口关闭事件中获取父窗口实例并调用其刷新方法 [^4]。 ### 委托调用父窗口控件 通过委托在窗口中调用父窗口的控件。 示例代码: ```csharp // 窗口 SubForm public delegate void DelegateChangeTextVal(string TextVal); public partial class SubForm : Form { public SubForm() { InitializeComponent(); } public DelegateChangeTextVal ChangeTextVal; private void someMethod() { if (ChangeTextVal != null) { ChangeTextVal("New Text"); } } } // 父窗口 MainForm public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { SubForm SubForm = new SubForm(); SubForm.ChangeTextVal += new DelegateChangeTextVal(ChangeTextVal); SubForm.ShowDialog(); } public void ChangeTextVal(string TextVal) { this.textBox1.Text = TextVal; } } ``` 窗口定义委托,父窗口订阅委托事件并实现具体方法,窗口触发委托父窗口对应方法执行 [^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值