C# 提示用户保存修改的文件

4.7 提示用户保存修改的文件

用户在新建文本,打开其他文本或者退出文本编辑器时,如果编辑内容发生了改变, 应

提示用户是否保存已修改的文本内容。 因此就需要在用户关闭当前文件前, 弹出提示对话框,

提醒用户是否保存当前文件。本节实现此功能。

4.7.1 对话框 MessageBox

使用 MessageBox可以打开一个对话框,用法如下:

MessageBox.Show(this," 要保存当前更改吗? "," 保存更改吗? ",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question);

第一个参数是父窗口, 第二个参数是提示信息, 第三个参数是标题栏的内容, 第四个参数是有那些按钮,此例有 YES,NO,CANCEL 按钮,

还可以使用 AbortRetryIgnore( 中止、重试和忽略按钮 )、OK(确定按钮 )、 OKCancel(确定和取消按钮 )、 RetryCance( 重试和忽略按钮 )、YesNo(是和否按钮 )等选项。

第五个参数是使用那一个图标,此例是一个问号图标,还可以是 Asterisk 、Error 、Exclamation 、Hand、Stop、Warning 等图标,如为 None则无图标。

返回值是 System.Windows.Forms.DialogResult 变量,代表用户按了那一个按钮。

如果返回值是 System.Windows.Forms.DialogResult.Yes , 则表示按了 YES键,表示要存修改的文件。

扫描二维码关注公众号,回复: 8723777 查看本文章

如果返回值是 System.Windows.Forms.DialogResult.Cancel , 按 Cancel 键,表示忽略此次操作。

如果返回值是 System.Windows.Forms.DialogResult.No ,则表示按了 No键,表示不存修改的文件。

4.7.2 提示用户保存修改的文件的实现

(33)为 Form1 类增加一个 bool 变量 bSave=false作为标记,用来跟踪 RichTextBox 中文本内容改变的情况。

在程序开始运行、建立和打开一个新文件时, bSave=false,表示不必保存当前文本。

RichTextBox 控件有一个 TextChanged 事件,当文本发生改变的时候,这个事件就会被激活,在该事件处理函数中,使 bSave=true。

(34)首先增加一个函数,其功能是判断是否需要将已修改的文件存盘,之所以要增加这个函数是因为有三处要用到此函数。

该函数返回 true,表示继续操作,该函数返回 false,表示忽略此次操作,该函数定义如下:

public bool IfSaveOldFile()
{
bool ReturnValue= true ;
if (bSave)
{
System.Windows.Forms.DialogResult dr;
dr=MessageBox.Show(this ," 要保存当前更改吗? "," 保存更改吗? ",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question);
switch (dr)
{
case System.Windows.Forms.DialogResult.Yes:// 单击了 yes按钮,保存修改
bSave=false;
if (s_FileName.Length!=0)
richTextBox1.SaveFile(s_FileName,RichTextBoxStreamType.PlainText);
else
{
SaveFileDialog saveFileDialog1= new SaveFileDialog();
saveFileDialog1.Filter=" 纯文本文件 (*.txt)|*.txt| 所有文件 (*.*)|*.*";
saveFileDialog1.FilterIndex=1;
if(saveFileDialog1.ShowDialog()==DialogResult.OK)
{
s_FileName=saveFileDialog1.FileName;
richTextBox1.SaveFile(saveFileDialog1.FileName,
RichTextBoxStreamType.PlainText);
}
}
ReturnValue= true ;
break ;
case System.Windows.Forms.DialogResult.No:// 单击了 no按钮,不保存
bSave=false;
ReturnValue= true ;
break ;
case System.Windows.Forms.DialogResult.Cancel:// 单击了 Cancel按钮
ReturnValue= false ;
break ;
}
}
return ReturnValue;
}
(35)在新建和打开菜单项的事件处理函数的头部增加如下语句:

if (!IfSaveOldFile())// 如果忽略,退出。
return ;

(36)修改存文件菜单项单击事件处理函数如下:

private void menuItemSaveFile_Click( object sender, System.EventArgs e)
{
if (s_FileName.Length!=0)
{
bSave=false ;// 阴影为增加的语句
richTextBox1.SaveFile(s_FileName,RichTextBoxStreamType.PlainText);
}
else
menuItemSaveAs_Click(sender,e);
}
(37)修改另存为菜单项单击事件处理函数如下:

private void menuItemSaveAs_Click( object sender, System.EventArgs e)
{
SaveFileDialog saveFileDialog1= new SaveFileDialog();
saveFileDialog1.Filter=" 纯文本文件 (*.txt)|*.txt| 所有文件 (*.*)|*.*";
saveFileDialog1.FilterIndex=1;
if(saveFileDialog1.ShowDialog()==DialogResult.OK)
{
s_FileName=saveFileDialog1.FileName;
richTextBox1.SaveFile(saveFileDialog1.FileName,
RichTextBoxStreamType.PlainText);
bSave=false ;// 阴影为增加的语句
}
}
(38)为 RichTextBox 控件 TextChanged事件增加事件处理函数如下:

private void richTextBox1_TextChanged( object sender, System.EventArgs e)
{ bSave=true ;}

(39)为 Form1 窗体 Closing 事件是在关闭窗口之前发送的事件, 此时,窗体中的控件还存在,

还可以保存修改的内容,也可以不退出。增加它的事件处理函数如下:

private void Form1_FormClosing( object sender,System.ComponentModel.CancelEventArgs e)
{
if(!IfSaveOldFile())
e.Cancel= true ;// 不退出
}
(40)编译,运行.

猜你喜欢

转载自www.cnblogs.com/liudongjun/p/12216866.html