c# - 表单关闭对话框结果出现在所有表单中

标签 c#

我在 Form1 关闭事件中有这个代码:

private void MemberForm_FormClosing(object sender, FormClosingEventArgs e)
{
    DialogResult del = MessageBox.Show("Save changes?", "Save",      MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
    if (del == DialogResult.Yes)
    {
        // do something
    }
    if (del == DialogResult.No)
    {
        // do something
    }
    if (del == DialogResult.Cancel)
    {
        e.Cancel = true;
    }
    ...
}

如果我从 form1 中的按钮打开 form2,在 form2 关闭事件中它将再次显示对话框结果。我希望对话框结果只显示在 form1 中。 为什么会这样?

所以我的新问题是:我可以对保存按钮做同样的事情吗?防止第二次写代码? 示例

base.OnClosing(e);
        if (e.CloseReason == CloseReason.UserClosing)
        {
        DialogResult del = MessageBox.Show("Save change?", "Save", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
            if (del == DialogResult.Yes)
            {
              ??????????????

            }
            if (del == DialogResult.No)
            {

                Form3 ss = new Form2();
                Hide();
                ss.ShowDialog();

            }
            if (del == DialogResult.Cancel)
            {
                e.Cancel = true;
            }

    public bool saveToolStripMenuItemClicked { get; set; }

    private void saveToolStripMenuItem_Click(object sender, EventArgs  e)
    {
                Form3 ss = new Form3();
                Hide();
                ss.ShowDialog();
    }

现在我想当 dialogresult(是)对 saveToolStripMenuItem_Click 做同样的事情

最佳答案

protected override void OnClosing(CancelEventArgs e)
    {
        base.OnClosing(e);
         if (e.CloseReason == CloseReason.UserClosing) 
         {
            //Some Code
         }
    }

试试这个,它应该只在你关闭整个应用程序时运行,确保你把它放在主窗体上。

你在 Form2 关闭上运行的原因是因为你有一个成员关闭,据我所知,它在所有关闭的表格上运行

更新

我已经编辑了上面的代码,如果你把代码放在if语句中那么它只会在用户点击关闭按钮时运行

更新 2

protected override void OnClosing(CancelEventArgs e)
{
    base.OnClosing(e);
    if(BackButtonClicked)
    {
      //code used for DialogResult.No answer
      BackButtonClicked = false;
    }
     if (e.CloseReason == CloseReason.UserClosing) 
     {
        //Some Code
     }
}
    public bool BackButtonClicked { get; set; }

 private void backButton_Click(object sender, EventArgs e)
        {
          //Some code
          BackButtonClicked = true;
          //Some code, close form
        } 

关于c# - 表单关闭对话框结果出现在所有表单中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37139526/

相关文章:

c# - 如何处理多个TCP客户端进行通信

c# - 从 GenericClass<T> 访问静态方法,其中 T 由 Type 实例给出

c# - AppHarbor 上的新 MVC4 应用程序出现错误 : Unable to find the requested .Net Framework Data Provider。它可能没有安装

c# - 在相机 View 中偏移 3D 对象

c# - 字符串未被识别为使用 C# 的有效 DateTime

c# - 在 GridView 列中拟合长文本

c# - 将父级和子级关系集合映射到 EF6 中的单个表

c# - Seed() 没有完全更新数据库

c# - 删除服务器 :Kestrel Header in Net Core 3

c# - EF代码优先,单向多对多关系不是由第二个实体的Id