c# - 在 Windows 窗体中单击关闭按钮时的事件处理程序

标签 c# .net winforms event-handling

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

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
}

关于c# - 在 Windows 窗体中单击关闭按钮时的事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9866207/

相关文章:

c# - 在 C# 中创建 MS Teams 团队 - AddAsync 返回 null

c# - WPF图像旋转变换后不显示

c# - 在 linq-to-sql 中的两个日期时间之间查询

.net - 我如何转义 HTML 字符?在 .NET 中 --> “

c# - 使用 Aggregate 获取大于某个值的多个整数

.net - 强调SplitContainer

c# - 寻找可以在 WinForms 应用程序中播放 AVI 文件的组件(.NET 或 COM/ActiveX)

c# - 自定义类包含另一个自定义类时的 DataContractResolver/KnownType 问题

c# - Zedgraph FillType.GradientByY 固体

.net - 如何更改组合框背景颜色(不仅仅是下拉列表部分)