winform的窗口刷新问题:

有三个窗口:
1、主界面MainForm
2、注册界面MissionForm (主界面的子窗体)
3、详细信息界面ConfigurationForm
具体工作过程是这样的,在主界面有一个菜单栏,菜单栏带一个下拉菜单,任务ToolStripMenuItem,我在进入主界面时点击注册界面,进入注册界面后添加企业名称,添加完毕后详细信息界面自动弹出,在这个界面里把企业相关的所有信息添加完毕。添加完后,点击完成按钮(tb_refresh),详细信息界面关闭,而主菜单的下拉菜单更新。
现在我已经成功便写了一个方法public void refresh()可以实现菜单栏更新,
使用ToolStripMenuItem.DropDownItems.Add(".");
我发现,在MainForm界面里运行这个没问题,菜单更新很顺利。后来老板要求实时刷新就是在点击tb_refresh后菜单栏直接更新,我原来是想在tb_refresh后加一段代码:
MainForm mf=new MainForm();
mf.refresh();
this.close();
但发现执行不顺利,菜单栏更新不了,而奇怪的是我用断点跟踪发现refresh()方法明明运行了,效果很好,但下拉菜单就是不更新(请千万别怀疑refresh方法有问题,而且我已经把它定义为公共的了)。后来有人告诉我要将ToolStripMenuItem的可见性定义为public,定义完之后还是没有改变。
而且,我使用同样的方式刷新别的子窗体的TreeView也存在着公共方法已经运行了,但控件不刷新的问题。
因此在这里向各位高人求教!谢谢您花费这么多时间看我的问题!

第1个回答  推荐于2017-11-22
MainForm mf=new MainForm();你这句是重新建一个实列, mf.refresh();是对你新建的这个实列操作,跟你原先已经打开的MainForm 没有什么关系,所以你当然看不到刷新了。

修改方法1:
如果你的详细信息界面ConfigurationForm 是在MainForm下用ShowDialog方式打开,那就直接在MainForm里刷新
MainForm的代码:
using (ConfigurationForm frm = new ConfigurationForm())
{
frm.ShowDialog();
this.refresh();
}

修改方法2:
如果你想在详细信息界面ConfigurationForm写刷新代码,那就像如下这么写:
((MainForm)this.Owner).refresh();
当然前提也是从MainForm打开ConfigurationForm

修改方法3:
如果你是从MissionForm 打开ConfigurationForm
那就在构造函数MainForm传过去。先传给MissionForm,再从MissionForm传给ConfigurationForm
不在构造函数传,自己写个方法也可以,这个代码多一点,我就不写了本回答被提问者采纳
相似回答