【问题标题】:Form Closing dialog result appears in all forms表单关闭对话框结果出现在所有表单中
【发布时间】:2016-05-10 13:08:47
【问题描述】:

我在 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 (Yes) 对 saveToolStripMenuItem_Click 做同样的事情

【问题讨论】:

  • form2 是否继承自 form1?你是如何创建form2的?您可以将此处理程序添加到任何地方的 form2 关闭事件吗?
  • Form2 ss = new Form2();隐藏(); ss.ShowDialog();
  • 那是他显示form2的代码

标签: c#


【解决方案1】:
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
        } 

【讨论】:

  • 唯一有效的情况是当我从对话框结果中打开表单 2 时。例如 if (del == DialogResult.Yes){Form2 ss = new Form2();ss.showdialog();
  • 我不确定你想做什么?从问题的角度来看,它是说它显示了“保存更改?”的对话框。在form2中,你只希望它在form1中显示?对吗?
  • 是的。在我的表单 1 中,按钮代码是 Form2 ss = new Form2();隐藏(); ss.showdialog();也许当我使用隐藏时,它不明白表单已关闭。
  • 希望回答对你有帮助
  • 忘记在第一个 if 语句的底部添加一些东西,我现在已经添加了。我只是将 BackButtonClicked 设置回 false,否则它将始终运行该代码。请记住,如果您希望 if 语句仅在他们单击 x 按钮时运行,然后将其放入第二个 if 语句
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
  • 2016-10-13
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 2011-01-01
相关资源
最近更新 更多