通过反射特性读取数据表生成菜单后出现的有关问题
通过反射特性读取数据表生成菜单后出现的问题
程序能够很好执行,但问题出现在关闭打开的MDI中的子窗体,再次点击时报错,原因是OpenForms[i]中显示已经关闭的窗体仍是存在的,于是依旧执行 Application.OpenForms[i].Activate(),又发现该窗体不存在。
请帮忙分析原因,提出解决方案!!
------解决方案--------------------
IsHandleCreated
http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.ishandlecreated(v=vs.110).aspx
//UserNavBarItem.menuEvent为数据表对应的Form名称,通过该字符串转换成对应Form类,产生实例打开。
Assembly assembly = Assembly.LoadFile(Application.StartupPath + "\\myapp.exe");
object newForm = assembly.CreateInstance(UserNavBarItem.menuEvent);
if (newForm != null)
{
newItem.LinkClicked += (sender, e) => PublicService.OpenForm((Form)newForm, this);
}
//PublicService中的关于在MDI中的子窗体只打开一次,再次点击自动激活该窗体的事件
public static void OpenForm(Form customerForm,Form MdiForm)
{
//1
for (int i = 0; i < Application.OpenForms.Count; i++)
{
if (Application.OpenForms[i].GetType() == customerForm.GetType())
{
Application.OpenForms[i].Activate();
return;
}
}
//2
customerForm.MdiParent = MdiForm;
customerForm.Show();
}
程序能够很好执行,但问题出现在关闭打开的MDI中的子窗体,再次点击时报错,原因是OpenForms[i]中显示已经关闭的窗体仍是存在的,于是依旧执行 Application.OpenForms[i].Activate(),又发现该窗体不存在。
请帮忙分析原因,提出解决方案!!
------解决方案--------------------
IsHandleCreated
http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.ishandlecreated(v=vs.110).aspx