我不能使用Form.ShowDialog()我想使用Form.Show()但我希望在Form.Closed之后的From.Show()之后执行代码
public void Tools(){
var frm=new ToolFrm();
frm.Show();
//do something
}
我希望返回true并在表单frm
打开时保持执行。
答案 0 :(得分:2)
如果您想在关闭无模式表单时运行某些代码,那么您可以订阅表单的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;
答案 1 :(得分:-1)
如果我正确理解您的问题,您希望在重新打开表单时运行代码。 showdialog实际上是您想要并且需要使用的选项。
private bool Tools()
{
this.Hide();
using (Form frm = new ToolFrm())
frm.ShowDialog();
DoSomethingYouWant(); //For example return true/false;
this.Show();
}
在方法DoSomethingYouWant()
中,您可以执行任何操作。
当用户直到ToolFrm关闭时,表格将被隐藏。
如果要运行示例新的FormLoad()
事件,可以订阅它。
将DoSomethingYouWant()
替换为FormName_Load(this, e);
在加载事件中你可以这样做:
private void Form1_Load(object sender, EventArgs e)
{
if(Tools){
Messagebox.Show("true")
}
if(!Tools{
Messagebox.Show("false")
}
}