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

本文关键字:程序 退出 放弃 确认 richtextbox 如果 | 更新日期: 2023-09-27 18:20:52

当用户单击关闭按钮时,我想问他/她:保存文件,放弃更改,或者在RichTextBox内容发生更改时返回。就像Windows记事本或任何其他文本编辑器一样。我怎么能那样做?

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

您需要了解事件及其工作方式。在这种情况下,您对RichTextBoxTextChanged事件和表单的FormClosing事件感兴趣。

TextChanged事件:MSDN

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

类似地,使用FormClosing事件可以让您对试图关闭表单的用户做出反应

表单关闭事件:MSDN

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

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

MessageBox.Show:MSDN

如果您不知道如何连接这些事件,那么我建议您通读一些基本文档和示例。这是非常基本的东西,你需要理解才能在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
        }
    }
}