如果richtextbox内容发生更改,则在程序退出时确认放弃更改
本文关键字:程序 退出 放弃 确认 richtextbox 如果 | 更新日期: 2023-09-27 18:20:52
当用户单击关闭按钮时,我想问他/她:保存文件,放弃更改,或者在RichTextBox内容发生更改时返回。就像Windows记事本或任何其他文本编辑器一样。我怎么能那样做?
您需要了解事件及其工作方式。在这种情况下,您对RichTextBox
的TextChanged
事件和表单的FormClosing
事件感兴趣。
TextChanged事件:MSDN
每当修改文本框的内容时,就会引发TextChanged
事件。跟踪文本框中更改的一种方法是简单地使用布尔值。在将数据加载到文本框中时,请确保将其设置为false
。然后,当用户更改文本时,TextChanged
事件将触发,您可以将_textChanged
(在下面的示例中)值设置为true
。
类似地,使用FormClosing
事件可以让您对试图关闭表单的用户做出反应
表单关闭事件:MSDN
此事件传递一个FormClosingEventArgs
值e
,该值允许您取消关闭表单(在这种情况下,如果用户在提示文本已更改时选择取消)。它还允许您在关闭表单之前执行任何其他操作。
要创建消息对话框,可以使用适当的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
}
}
}