窗体关闭事件取消按钮

本文关键字:取消 按钮 事件 窗体 | 更新日期: 2023-09-27 18:02:07

我有一个Form_Closing事件,提示用户文件是否已更改,如果已对文件进行更改则保存(标准的是/否/取消选项)。

如果我选择文件->新建,有一个现有的文件的变化,我得到提示,如预期的,但当我选择取消,新的表单,而不是停留在当前的表单,我结束了两个表单打开一次。

MainForm (File New)代码:

       if (editForm != null)
        {
            // Close existing Editor form
            editForm.Close();
            // Open new form
            editForm = new EditorForm(this);
            // Close Form Events
            editForm.Closing += new CancelEventHandler(EditorForm_Closing);
            editForm.Show();
            editForm.Focus();
      else
        {
            // Open new Editor 
            editForm = new EditorForm(this);
            // Close Form Events
            editForm.Closing += new CancelEventHandler(EditorForm_Closing);
            editForm.Show();
            editForm.Focus();
        }

这是我的EditForm_Closing:

  if (editForm != null)
        {
            if (editForm.diagramComponent.Model.Modified)
            {
                DialogResult res = MessageBox.Show(this, "The project has been modified. Save changes?", "Save changes", MessageBoxButtons.YesNoCancel);
                if (res == DialogResult.Yes)
                {
                    if (!editForm.HasFileName)
                    {
                        if (this.saveEditorDialog1.ShowDialog(this) == DialogResult.OK)
                        {
                            this.ActiveDiagram.SaveSoap(this.saveEditorDialog1.FileName);
                            editForm.FileName = this.saveEditorDialog1.FileName;
                        }
                    }
                    else
                    {
                        this.ActiveDiagram.SaveSoap(editForm.FileName);
                    }
                }
                else if (res == DialogResult.Cancel)
                {
                    e.Cancel = true;
                }
            }

不确定如何使取消关闭事件和我的文件->新建之间的相关性。非常感谢任何帮助。谢谢你。

EDIT:添加了我的EditForm_Closing Event.

窗体关闭事件取消按钮

尝试用以下代码替换主表单的代码:

<>之前if (editForm != null) {//尝试关闭现有的编辑器表单editForm.Close ();if(! editform . isdispose)//关闭被取消。返回;}//打开新表单editForm = new EditorForm(this);//关闭表单事件editForm。FormClosing += new FormClosingEventHandler('适合这里的方法');editForm.Show ();editForm.Focus ();

关闭事件处理程序应该将editForm属性设置回null。所以像这样检查:

if (editForm != null) {
    editForm.Close();
    if (editForm != null) return;  // Close was cancelled
    // etc..
}