繁体   English   中英

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

[英]An Event Handler when Close Button is clicked in windows form

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

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)线路do something只会被执行时nw将被关闭

如果您需要从该对话框中“返回”一个值,请知道:关闭它时,该对话框不会立即释放。 所以你可以这样做:

NewForm nw = new NewForm();
nw.ShowDialog();
var x = nw.Property1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM