c #Windows窗体:窗体关闭事件取消按钮

时间:2011-07-12 21:39:43

标签: c# windows forms events

我有一个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;
                }
            }

不确定如何在取消关闭事件和我的文件之间建立关联 - >新。任何帮助是极大的赞赏。谢谢。

编辑:添加了我的EditForm_Closing事件。

2 个答案:

答案 0 :(得分:1)

您的Closing事件处理程序应将editForm属性设置为null。所以检查一下:

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

或者只使用私有布尔成员。

答案 1 :(得分:1)

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

if (editForm != null) {
    // try closing existing Editor form
    editForm.Close();
    if(!editForm.IsDisposed) // close was canceled.
        return;
}

// Open new form
editForm = new EditorForm(this);
// Close Form Events
editForm.FormClosing += new FormClosingEventHandler('suitable method here');
editForm.Show();
editForm.Focus();