Form.Close之后会发生什么
本文关键字:什么 Close 之后 Form | 更新日期: 2023-09-27 18:28:19
我有一个类似的代码
void onDgvRelations_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == 2 && ktlg == null)
{
this.Cursor = Cursors.WaitCursor;
ktlg = new FormKatalog();
ktlg.Show();
this.Cursor = Cursors.Default;
}
}
这个想法是检查一个表单
FormKatalog ktlg
已关闭。如果它关闭了,我必须创建一个新的表单并将其显示给用户。问题是,在用户关闭表单后,变量ktlg永远不会为null。
如何正确检查表单是否未实例化或被用户关闭?
您可以使用自定义布尔开关并在Form.Closed Event处理程序中设置它
// on the class level
private bool isClosed = false;
void OnCellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == 2 && (ktlg == null || this.isClosed))
{
this.Cursor = Cursors.WaitCursor
if (ktlg == null)
{
ktlg = new FormKatalog();
ktlg.FormClosed += (s, e) => this.isClosed = true;
}
this.isClosed = false;
ktlg.Show();
this.Cursor = Cursors.Default;
}
}
我假设ktlg
变量是类成员?然后你可以做以下操作:
void onDgvRelations_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == 2 && ktlg == null)
{
this.Cursor = Cursors.WaitCursor;
if (ktlg == null)
{
ktlg = new FormKatalog();
ktlg.FormClosed += (sender, e) => ktlg = null;
ktlg.Show();
}
else
ktlg.BringToFront();
this.Cursor = Cursors.Default;
}
}
您可以使用一个"表单关闭时"事件。
这有点欺骗,但您可以在用户关闭表单时设置一个标志(并在FormLoad上恢复)