VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > C#编程 >
  • c#教程之提示用户保存修改的文件

本站最新发布   Python从入门到精通|Python基础教程
试听地址  
https://www.xin3721.com/eschool/

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

用户在新建文本,打开其他文本或者退出文本编辑器时,如果编辑内容发生了改变,应提示用户是否保存已修改的文本内容。因此就需要在用户关闭当前文件前,弹出提示对话框,提醒用户是否保存当前文件。本节实现此功能。

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键,表示要存修改的文件。如果返回值是System.Windows.Forms.DialogResult.Cancel,按Cancel键,表示忽略此次操作。如果返回值是System.Windows.Forms.DialogResult.No,则表示按了No键,表示不存修改的文件。以上设计的对话框MessageBox如下图:

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

(1)    为Form1类增加一个bool变量bSave=false作为标记,用来跟踪RichTextBox中文本内容改变的情况。在程序开始运行、建立和打开一个新文件时,bSave=false,表示不必保存当前文本。RichTextBox控件有一个TextChanged事件,当文本发生改变的时候,这个事件就会被激活,在该事件处理函数中,使bSave=true。
(2)    首先增加一个函数,其功能是判断是否需要将已修改的文件存盘,之所以要增加这个函数是因为有三处要用到此函数。该函数返回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;
}
(3)    在新建和打开菜单项的事件处理函数的头部增加如下语句:
if(!IfSaveOldFile())//如果忽略,退出。
return;
(4)    修改存文件菜单项单击事件处理函数如下:
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);
}
(5)    修改另存为菜单项单击事件处理函数如下:
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;//阴影为增加的语句
}
}
(6)    为RichTextBox控件TextChanged事件增加事件处理函数如下:
private void richTextBox1_TextChanged(object sender, System.EventArgs e)
{   bSave=true;}
(7)    为Form1窗体Closing事件是在关闭窗口之前发送的事件,此时,窗体中的控件还存在,还可以保存修改的内容,也可以不退出。增加它的事件处理函数如下:
private void Form1_Closing(object sender,System.ComponentModel.CancelEventArgs e)
{   if(!IfSaveOldFile())
        e.Cancel=true;//不退出
}
(8)    编译,运行,键入若干字符,选中菜单项新建或打开,或退出,将看到提示信息,问是否保存修改的文件。有三种选择:存文件,不存文件,忽略此次操作,试验单击不同按钮的效果。
相关教程