如果richtextbox内容发生更改,则放弃更改在程序退出时确认

时间:2014-09-07 12:12:22

标签: c# dialog richtextbox messagebox notepad

我想询问用户何时单击关闭按钮:保存文件,放弃更改,或者返回RichTextBox内容更改。像Windows Notepad或任何其他文本编辑器一样。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

您需要read about events以及它们的工作原理。在这种情况下,您对表单的TextChangedRichTextBox事件的FormClosing事件感兴趣。

TextChanged Event : MSDN

只要修改了文本框的内容,就会引发TextChanged事件。跟踪文本框中的更改的一种方法是使用布尔值。将数据加载到文本框时,请务必将其设置为false。然后,当用户更改文本时,TextChanged事件将会触发,您可以将_textChanged(在下面的示例中)值设置为true

同样,使用FormClosing事件可以让您对试图关闭表单的用户做出反应。

FormClosing Event : MSDN

此事件传递FormClosingEventArgse,允许您取消表单的关闭(在这种情况下,如果用户选择在提示有关已更改的文本时取消)。它还允许您在表单关闭之前执行任何其他操作。

要创建消息对话框,您可以使用MessageBox.Show的适当重载 - 此函数返回DialogResult,指示用户单击了哪些按钮。这允许您根据用户的选择采取不同的操作。

MessageBox.Show : MSDN

如果你不知道如何连接这些事件,那么我建议你仔细阅读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
        }
    }
}