表单关闭对话框结果以所有表单显示

时间:2016-05-10 13:08:47

标签: 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进行相同的操作

1 个答案:

答案 0 :(得分: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
        }