Требуется ли новая тема в FormClosing? - PullRequest
2 голосов
/ 05 февраля 2010

У меня есть обработчик события нажатия кнопки, который говорит следующее. Close ()

В событии FormClosing я обнаруживаю несохраненные изменения и говорю «Хотите сохранить?»

Если они говорят Да, я устанавливаю e.Cancel = true и затем вызываю мой метод Save. Если данные сохраняются нормально в моем методе Save в конце, я говорю this.Close (), но форма остается открытой.

Это кажется такой простой идеей, но я не могу ее реализовать.

Нужно ли мне создавать новый поток в FormClosing, чтобы, если они говорят "Да", установить e.Cancel = true и создать новый поток для сохранения, который затем вызовет this.Close ()

Ответы [ 2 ]

3 голосов
/ 05 февраля 2010

Звучит так, будто вы не хотите устанавливать для e.Cancel значение true, а просто вызывать Save() условно из FormClosing. Вы отменяете только если сбой сохранения. Например:

private void OnFormClosing(object sender, System.ComponentModel.CancelEventArgs e)
{
   if ( IsDataModified() )  // check if the data is unsaved...however you do so
   {
      // display a message asking the user to save changes or abort.
      if(MessageBox.Show("Do you want to save your changes?", 
                         "My Application", 
                         MessageBoxButtons.YesNo) ==  DialogResult.Yes)
      {
          if( !SaveChanges(); )
              e.Cancel = true; // save did not succeed!
      }
   }
}
2 голосов
/ 05 февраля 2010

Если они говорят Да, я устанавливаю e.Cancel = true, а затем вызываю мой метод Save. Если данные сохраняются нормально в моем методе Save в конце, я говорю this.Close (), но форма остается открытой

Измени это вокруг.

  • Подскажите пользователю
  • Если они говорят, да, установите e.Cancel = !Save()
  • Если они говорят нет, задайте e.Cancel = true

Это приведет к закрытию формы , если не ответит «нет» при запросе, или если процедура Save () не будет выполнена. Никаких новых потоков или потоков не требуется, просто небольшое изменение в логике.

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