我想询问用户何时单击关闭按钮:保存文件,放弃更改,或者返回RichTextBox内容更改。像Windows Notepad或任何其他文本编辑器一样。我怎么能这样做?
答案 0 :(得分:1)
您需要read about events以及它们的工作原理。在这种情况下,您对表单的TextChanged
和RichTextBox
事件的FormClosing
事件感兴趣。
只要修改了文本框的内容,就会引发TextChanged
事件。跟踪文本框中的更改的一种方法是使用布尔值。将数据加载到文本框时,请务必将其设置为false
。然后,当用户更改文本时,TextChanged
事件将会触发,您可以将_textChanged
(在下面的示例中)值设置为true
。
同样,使用FormClosing
事件可以让您对试图关闭表单的用户做出反应。
此事件传递FormClosingEventArgs
值e
,允许您取消表单的关闭(在这种情况下,如果用户选择在提示有关已更改的文本时取消)。它还允许您在表单关闭之前执行任何其他操作。
要创建消息对话框,您可以使用MessageBox.Show
的适当重载 - 此函数返回DialogResult
,指示用户单击了哪些按钮。这允许您根据用户的选择采取不同的操作。
如果你不知道如何连接这些事件,那么我建议你仔细阅读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
}
}
}