我想知道在Windows窗体中,当用户单击关闭按钮时是否有任何事件处理程序。我的初始计划是,当用户单击关闭按钮时,它将向调用该窗体的调用者返回一个布尔值。例如:
public void newWindow(){
NewForm nw = new NewForm();
nw.ShowDialog();
if(nw.isClosed){
do something
}
}
这可行吗?
我想知道在Windows窗体中,当用户单击关闭按钮时是否有任何事件处理程序。我的初始计划是,当用户单击关闭按钮时,它将向调用该窗体的调用者返回一个布尔值。例如:
public void newWindow(){
NewForm nw = new NewForm();
nw.ShowDialog();
if(nw.isClosed){
do something
}
}
public void newWindow()
{
Form1 nw = new Form1();
DialogResult result = nw.ShowDialog();
//do something after the dialog closed...
}
然后在Form1的点击事件处理程序中:
private void buttonOk_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
}
private void buttonCancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}
public void newWindow()
{
Form2 nw = new Form2();
nw.FormClosed += nw_FormClosed;
nw.Show();
}
void nw_FormClosed(object sender, FormClosedEventArgs e)
{
var form = sender as Form2;
form.FormClosed -= nw_FormClosed; //unhook the event handler
//you can still retrieve the DialogResult if you want it...
DialogResult result = form.DialogResult;
//do something
}
ShowDialog
,你可以像这样做。你也可以在FormClosing
事件中更改返回的DialogResult
。DialogResult dr = nw.ShowDialog();
if (dr == DialogResult.Cancel)
{
//Do Stuff
}
你已经快完成了!
你不需要 if(nw.isClosed)
,当 nw
关闭时,do something
这一行将会被执行。
如果你需要从对话框中 '返回' 一个值,请注意:关闭对话框后,它不会立即释放。所以你可以像这样做:
NewForm nw = new NewForm();
nw.ShowDialog();
var x = nw.Property1