我正在使用此函数关闭现有窗体并打开一个新窗体。
如果没有exixting形式,则抛出错误。
错误:
目标:System.Object MarshaledInvoke(System.Windows.Forms.Control,System.Delegate,System.Object[],Boolean)
消息:在创建窗口句柄之前,无法对控件调用Invoke或BeginInvoke。
堆栈:位于System.Windows.Forms.Control.MarshaledInvoke(控件调用方,委托方法,Object[]参数,布尔同步)
所以需要在关闭表单之前检查是否有任何打开的表单,以避免错误。如何?
static public void NewMainForm(Form main, bool ClosePreviousMain)
{
if (main != null)
{
Global.ActiveForm = main.Text;
if (ClosePreviousMain & MyContext.curMain != null)
{
MyContext.curMain.FormClosed -= new FormClosedEventHandler(main_FormClosed);
//Need to check for any form active and then close the form.
MyContext.curMain.Invoke(new Action(MyContext.curMain.Dispose));
}
MyContext.curMain = main;
MyContext.curMain.FormClosed += new FormClosedEventHandler(main_FormClosed);
MyContext.curMain.ShowDialog();
}
}
6条答案
按热度按时间4smxwvx51#
您可以使用Application.OpenForms集合。
sq1bmfud2#
我已经粘贴了两个方法,一个是简单的,第二个是LINQ。
vxqlmq5t3#
如果你知道表单的名称,你也可以这样做:
i7uq4tfw4#
这部分代码搜索窗体的现有示例,如果存在,则仅显示它,如果不存在,则创建它的示例
dced5bon5#
我可能会迟到,但以防万一有人需要这个。
例如:
fc对象包含以下属性:Count和InnerList(非常有用)
希望它能有所帮助,即使是2021年,我认为有人会需要这些信息(我在搜索时没有在任何地方看到)
p4rjhz4m6#
关闭窗体