c#重新加载主窗体
我想点击子窗体的某一个按钮,(现在的窗体已经有好多变化了,可能有几个窗体打开了),点击后,然后恢复刚加载的时候的样子,只出现第一次运行时的主窗体。有点像刷新,怎么办啊??
因为我在子窗体点击的刷新按钮,//this.Refresh();//和 this.OnLoad(e);
只刷新了现在的子窗口,这两个都不行,我是想出现刚运行的时候,只出现主窗体。
网上说用重新加载,能不能用代码解释一下
例:主窗体form1,按钮buttonShow,点击出现子窗体form2.子窗体的刷新按钮,buttonUpdate。点击重新运行form1.。。。
c#
------解决方案--------------------遍历主窗体的所有子窗体,把它们都关了不就可以了吗?
------解决方案--------------------那你自动把程序退出,并用代码启动你的程序
System.Diagnostics.Process.Start(启动你的程序);
Application.Exit(); //退出当前的程序
或者
你在主窗体里写一个初始的方法
这个方法把所有子窗体关闭,并恢复主窗体一开始的位置(这个位置在主窗体起来时记在一个变量里),当你要回复初始时调用此方法
------解决方案--------------------就winform来说,总要有一个初始窗体。(我们不讨论修改这个窗体的复杂问题)
那么你的所谓“我是想出现刚运行的时候,只出现主窗体”,这个主窗体只能是一个子窗体。
比如说,在你的初始窗体(比如说是登录窗体)中,当登陆完毕,验证用户名密码正确,之后可以写:
void Logon()
{
var f = new MainForm();
f.FormClosed += f_FormClosed;
f.Show();
this.Hide();
}
void f_FormClosed(object sender, FormClosedEventArgs e)
{
this.Close();
}
初始窗体隐藏自身之后,等待主窗体退出则自身也退出。
不过按照你的设计,主窗体又“重新初始化”了。为了少写一些垃圾代码,我们可以让主窗体通知初始窗体“重建”主窗体,这就需要在主窗体中自定一个事件例如叫做Refresh:
public event EventHandler<EventArgs> Refresh;
然后初始化窗体的业务逻辑流程需要重构:
private MainForm main;
void Logon()
{
CreateMainForm();
}
private void CreateMainForm()
{
main = new MainForm();
main.FormClosed += f_FormClosed;
main.Refresh += main_Refresh;
main.Show();
this.Hide();
}
void main_Refresh(object sender, EventArgs e)
{
if (main != null)
{
main.FormClosed -= f_FormClosed;
main.Close();
}
CreateMainForm();
}
void f_FormClosed(object sender, FormClosedEventArgs e)
{
this.Close();
}
也就是说,捕获到主窗体的Refresh事件之后,首先要卸载对其Closed事件的捕获,然后关闭它,然后再创建一个新的主窗体。
---------------------------
以上就是你问的“刷新、重新加载主窗体、委托思想”的代码演示。
对于你的“子窗体通知系统刷新主窗体”也是一样,也是主窗体捕获打开的Form的Refresh自定义事件的处理。只不过是要多写一句“继续抛出事件”的代码而已,例如:
void OnOpenForm1()
{
subForm = new Form1();
subForm.Refresh += subForm_Refresh;
}