c # Windows Forms: Кнопка отмены события закрытия формы - PullRequest
2 голосов
/ 13 июля 2011

У меня есть событие Form_Closing, которое запрашивает пользователя, был ли файл изменен для сохранения, если были внесены изменения в файл (стандартные параметры Да / Нет / Отмена). Отмена - это когда вещи работают не так, как должны.

Если я выбираю «Файл» -> «Новый» и существует существующий файл с изменениями, меня ожидают, как и ожидалось, при выборе «Отмена» отображается новая форма вместо того, чтобы оставаться в текущей форме, и в итоге я получаю две открытые формы в один раз.

Вот код MainForm (новый файл):

       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 ]

1 голос
/ 13 июля 2011

Попробуйте заменить код основной формы следующим:

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();
1 голос
/ 13 июля 2011

Ваш обработчик события Closing должен установить для свойства editForm значение null. Поэтому проверьте это так:

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

Или просто используйте приватный логический член.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...