使用form.show(),而不用form.show()之类的showdialog()来运行代码



我不能使用form.showdialog()我想使用form.show(),但是我想在from.show()之后执行代码。

public void Tools(){
    var frm=new ToolFrm();
    frm.Show();
    //do something
}

我想返回true并在 frm打开表单时保持执行。

如果您想在关闭无调表单时运行一些代码,则可以订阅表单的FormClosed事件:

public bool Tools()
{
    var frm = new ToolFrm();
    frm.FormClosed += Form_FormClosed;
    frm.Show();
    return true;
}
private static void Form_FormClosed(object sender, FormClosedEventArgs e)
{
    ((Form)sender).FormClosed -= Form_FormClosed;
    MessageBox.Show("Form was closed");
}

请注意,如果您不从FormClosed事件中取消订阅,则订阅对象将保持对表单的引用,直到收集订阅对象为止。

为了防止这种行为,您可以像我对线路一样退订处理程序中的事件:

((Form)sender).FormClosed -= Form_FormClosed;

如果我正确理解您的问题,则在重新打开表单时要运行代码。Showdialog实际上是您想要和需要使用的选项。

    private bool Tools()
    {
        this.Hide();
        using (Form frm = new ToolFrm())
            frm.ShowDialog();
        DoSomethingYouWant(); //For example return true/false;
        this.Show();
    }

在方法DoSomethingYouWant()中,您可以做任何想做的事情。当用户解开工具FRM时,该表格将被隐藏。

如果要运行示例新的FormLoad()事件,则可以订阅它。通过用FormName_Load(this, e);替换DoSomethingYouWant()

在加载事件中,您可以做:

        private void Form1_Load(object sender, EventArgs e)
    {
        if(Tools){
           Messagebox.Show("true")
        }
        if(!Tools{
           Messagebox.Show("false")
        }
    }

最新更新