有没有更好的方法来检查表单是否已加载?

IEn*_*ble 0 c# winforms

我的应用程序中有2个表单,Form1并且Form2.我想知道是否有更好的方法来检查表单是否已经加载.如果表单加载到内存中并且可见,我希望按钮不执行任何操作,如果User 已关闭表单,则应该重新实例化它.

有关更多信息,请查看我的代码或评论.. :)

public partial class Form1: Form
{
    private Form2 form2;

    public Form1() {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e) {

        if (form2== null) {
            form2= new Form2();
        } else {
            if (form2.has_exited()) { // this is a private property
                                      // that I set when Form2.Closing executes
                form2.Dispose();
                form2= new Form2();
            }
        }
        form2.Show();
    }
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*rvy 5

您无需Form2处理结束事件,您可以直接从Form1以下位置执行此操作:

private Form2 form2;

private void button1_Click(object sender, EventArgs e)
{
    if (form2 == null)
    {
        form2 = new Form2();
        form2.FormClosed += (_, arg) =>
        {
            form2 = null;
        };
        form2.Show();
    }
    else
    {
        //the other form has been opened and not closed; not sure what you want to do
    }
}
Run Code Online (Sandbox Code Playgroud)

另请注意,如果Show您通过表格显示表格,则无需处理.如果你通过ShowDialog那时显示它,那么当你使用非模态对话框时,系统会自动将事件处理程序附加到调用dispose的结束事件.