2014-09-07 2 views
-1

Я хотел бы спросить пользователя, когда он нажимает кнопку закрытия: сохранить файл, отменить изменения или вернуться, если содержимое RichTextBox изменилось. Подобно Windows Notepad или любому другому текстовому редактору. Как я мог это сделать?Отменить изменения подтвердить при выходе программы, если содержимое richtextbox изменено.

+1

Великий. Сделай так. У вас есть наше одобрение. – nvoigt

+1

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

+0

Я пробовал искать, не получил ничего, что сработало бы. Это просто не сработало. Похоже, никто не задавал такого вопроса. Потому что я хочу, чтобы он отображался только при изменении содержимого текстового поля. – XeZrunner

ответ

1

Необходимо, чтобы read about events и как они работают. В этом случае вы заинтересованы в событии TextChanged мероприятия RichTextBox и FormClosing событиях формы.

TextChanged Event : MSDN

TextChanged событие возникает, когда содержимое текстового поля изменяются. Один из способов отслеживания изменений в текстовом поле - просто использовать логическое значение. Обязательно установите его на false, когда вы загружаете данные в текстовое поле. Затем, когда пользователь меняет текст, загорается событие TextChanged, и вы можете установить значение _textChanged (в приведенном ниже примере) значение true.

Аналогичным образом, использование события FormClosing позволяет вам отреагировать на пользователя, пытающегося закрыть форму.

FormClosing Event : MSDN

Это событие проходит FormClosingEventArgs значение e, что позволяет отменить закрытие формы (в данном случае, если пользователь выбирает отменить при появлении запроса о тексте, которые были изменены). Он также позволяет выполнять любые другие действия до закрытия формы.

Чтобы создать диалоговое окно сообщений, вы можете использовать соответствующую перегрузку MessageBox.Show - эта функция возвращает DialogResult, указав, какие из кнопок пользователь нажал. Это позволяет выполнять различные действия в зависимости от выбора пользователя.

MessageBox.Show : MSDN

Если вы не знаете, как связать эти события, то я предлагаю вам прочитать s ome of the basic documentation and examples. Это довольно элементарный материал, который вам нужно будет понять, чтобы многое сделать на C#. Примерами здесь являются winforms, так как вы не указали иначе.

Это тривиальный пример:

public partial class Form1 : Form 
{ 
    private bool _textChanged; 

    public Form1() 
    { 
     InitializeComponent(); 
     // load data to richtextbox, then .... 
     _textChanged = false; 
    } 

    private void richTextBox1_TextChanged(object sender, EventArgs e) 
    { 
     _textChanged = true; 
    } 

    private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     if (_textChanged) 
     { 
      DialogResult rslt = MessageBox.Show("save changes?", "some caption", 
           MessageBoxButtons.YesNoCancel); 
      if (rslt == DialogResult.Yes) 
      { 
       // save changes and exit 
      } 
      else if (rslt == DialogResult.Cancel) 
      { 
       e.Cancel = true; 
       // cancel close, return to form 
      } 
      // else do not save and continue closing form 
     } 
    } 
} 
Смежные вопросы