表格Dispose()或Close()

Jan*_*ana 5 winforms

我有2个表格.从我创建的一个表单中显示另一个表单.它工作得很好.但是当我尝试从创建它的表单中关闭或处理该表单时,我得到以下异常:

Exception :
   Value Dispose() cannot be called while doing CreateHandle().

Stack Trace :
========================
   at System.Windows.Forms.Control.Dispose(Boolean disposing)
   at System.Windows.Forms.Label.Dispose(Boolean disposing)
   at System.ComponentModel.Component.Dispose()
   at System.Windows.Forms.Control.Dispose(Boolean disposing)
   at System.Windows.Forms.ContainerControl.Dispose(Boolean disposing)
   at System.Windows.Forms.Form.Dispose(Boolean disposing)
   at Speedometer_Application.frmSpeedometer.Dispose(Boolean disposing) 

任何的想法????

Sam*_*ore 17

Value Close() cannot be called while doing CreateHandle()当我们尝试在构造函数或Load事件中关闭表单时,通常会发生错误.

例如,以下代码给出错误:

private void frmCustomer_Load(object sender, EventArgs e)
{
 if (!Valid())
  this.Close;
}
Run Code Online (Sandbox Code Playgroud)

解决方案:

private void frmCustomer_Load(object sender, EventArgs e)
{
 if (!Valid())
  this.BeginInvoke(new MethodInvoker(Close));
} 
Run Code Online (Sandbox Code Playgroud)

您可以在代码中使用它.

  • 这是VB的替代方案:`Me.BeginInvoke(New MethodInvoker(AddressOf Close))` (2认同)

Jan*_*ana 0

代码如下:

if (frmMain.objfrm== null)
{   
     frmMain.objfrm = frmMyForm.Instance;     
     frmMain.objfrm.ShowInTaskbar = false;    
}
frmMain.objfrm.Show();
frmMain.objfrm.BringToFront();
Run Code Online (Sandbox Code Playgroud)

frmMain 是具有 frmMyForm 静态变量的主窗体。比在我的代码中,无论我想在哪里使用它,我只需检查它是否不为空,而不是使用静态实例创建它,然后提供给人们。

关闭表单时,我有以下代码:

frmMain.objfrm.Close_this();
Run Code Online (Sandbox Code Playgroud)

Close_this 调用 Close() 或 Dispose() 方法。

但是当我调用该函数时,我得到了上述异常。