2013-05-15 1 views
0

У меня есть форма, которая содержит кнопку закрытия (есть много элементов управления в форме, но я касаюсь события закрытия) и кнопку сохранения.Событие закрытия закрытия окна формы с подтверждением нажатия кнопки в форме

Если форма имеет значение в определенном текстовом поле (скажем, textBox1),

Тогда я хочу, чтобы проверить, что кнопка сохранения нажата перед закрытием формы (независимо от кнопки закрытия или кнопки «X» на вершине нажат).

Но если в этом текстовом поле нет значения или форма просто инициализирована, и пользователь просто хочет закрыть форму, она просто закрывает форму. Как выполнить эту проверку.

+0

Вы знакомы с созданием свойства или созданием логического типа, чтобы при нажатии кнопки save вы сохраняли значение и после закрытия проверяли это значение first..if true, чтобы разрешить закрытие формы, еще раз предупредить пользователя щелкнуть кнопку сохранения и я считаю, что это должно быть проверено в событии формообразования. – MethodMan

ответ

0

Завяжите событие закрытия и используйте EventHandler для проверки этого текстового поля. Имейте в виду, что Закрытие происходит во время закрытия формы и (если серверы памяти правильно), свойство eventarg имеет свойство, которое позволит вам отменить закрытие формы. Это событие возникает независимо от того, как выполняется запрос.

+0

Можете ли вы объяснить это примерным кодом, пожалуйста. – AbdulAziz

+0

Почему бы не исследовать это самостоятельно? Потяните вверх окно, потяните вверх свойства и переключите его к виду случая. Тогда играйте с ним. –

1

Я бы воспользовался шаблоном 99% приложений Windows: разрешите закрыть окно, но попросите сохранить изменения, если они есть. Вот простая реализация этой модели:

private bool _hasChanges; 

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    this._hasChanges = true; 
} 

private void form_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (this._hasChanges) 
    { 
     var dialogResult = MessageBox.Show("Save changes?", "Confirm", MessageBoxButtons.YesNoCancel); 
     switch (dialogResult) 
     { 
      case DialogResult.Yes: 
       this.Save(); 
       break; 
      case DialogResult.No: 
       this._hasChanges = false; 
       break; 
     } 
     e.Cancel = this._hasChanges; 
    } 
} 

private void Save() 
{ 
    // Save 
    this._hasChanges = false; 
} 

private void buttonSave_Click(object sender, EventArgs e) 
{ 
    this.Save(); 
} 

private void buttonOk_Click(object sender, EventArgs e) 
{ 
    this.Close(); 
} 

private void buttonCancel_Click(object sender, EventArgs e) 
{ 
    this._hasChanges = false; 
    this.Close(); 
} 

Поворотная часть булево _hasChanges. Если есть много элементов управления, которые могут вызывать изменения, это может быть настоящая боль. Альтернативой может быть использование привязки данных к классу, который реализует INotifyPropertyChanged и подписаться на его PropertyChanged событие.