我有像
这样的代码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。
如何正确检查表单是否未实例化或用户是否已关闭?
答案 0 :(得分:3)
您可以使用自定义bool开关并在Form.Closed事件处理程序
中进行设置// 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;
}
}
答案 1 :(得分:2)
我认为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;
}
}
答案 2 :(得分:1)
您可以使用“On Form Closing”事件。
它有点讨厌,但你可以在用户关闭表单时设置一个标志(并将其恢复为onFormLoad)