在windows窗体中单击“关闭”按钮时的事件处理程序



我想知道如果用户在windows窗体中单击关闭按钮,是否有任何事件处理程序。我最初的计划是,当用户单击关闭按钮时,它会向调用方或调用该窗体的人返回一个布尔值。例如

public void newWindow(){
      NewForm nw = new NewForm();
      nw.ShowDialog();
      if(nw.isClosed){
       do something
   }
}

这可能吗?

如果使用.ShowDialog(),则可以通过DialogResult属性获得结果。

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
}

您应该查看FormClosing事件,或者由于您使用的是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

相关内容

  • 没有找到相关文章

最新更新