-
c#教程之提示用户保存修改的文件
本站最新发布 Python从入门到精通|Python基础教程
试听地址 https://www.xin3721.com/eschool/
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如下图:

(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) 编译,运行,键入若干字符,选中菜单项新建或打开,或退出,将看到提示信息,问是否保存修改的文件。有三种选择:存文件,不存文件,忽略此次操作,试验单击不同按钮的效果。
试听地址 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) 编译,运行,键入若干字符,选中菜单项新建或打开,或退出,将看到提示信息,问是否保存修改的文件。有三种选择:存文件,不存文件,忽略此次操作,试验单击不同按钮的效果。
最新更新
python中装饰器修复技术
python中filter、map、reduce的区别
python爬虫--cookie反爬处理
Python 模拟 Base64编码
证明task线程是来源于线程池的,线程重用
Python基础总结之第一天(新手可相互督促
Django:web认识,jinja2模块,如何安装Djang
tcp服务端无线为多个客户端服务
python自动化测试之DDT数据驱动
python输出九九乘法表
基于UDP的服务器端和客户端
再谈UDP和TCP
在socket编程中使用域名
网络数据传输时的大小端问题
socket编程实现文件传输功能
如何优雅地断开TCP连接?
图解TCP四次握手断开连接
详细分析TCP数据的传输过程
图解TCP数据报结构以及三次握手(非常详
TCP协议的粘包问题(数据的无边界性)
存储过程用法
MySQL教程之SQL ORDER BY 子句
MySQL教程之SQL AND & OR 运算符
MySQL教程之SQL WHERE 子句
MySQL教程之SQL SELECT DISTINCT 语句
MySQL教程之SQL SELECT 语句
MySQL教程之SQL语法
MySQL教程之SQL 简介
MySQL教程之MySQL之pymysql
MySQL教程之mysql设置不区分大小写