【Form窗体】文件操作完成记事本功能
对于 文件操作常用的就是文件读写,文件打开,文件保存等本文将制作一个记事本,完成基本的文件操作。并对常用控件包括对话框和菜单以及状态栏综合运用。
下面谈下设计思想,然后再看具体实现。(部分功能代码参考网络资源)
在布局上样式和计算机自带记事本功能都是一致的,这里难点和关键点就是逻辑方面的判断。剪切复制等可用不可用逻辑问题。以及何时保存,还有就是打印等需要一些API(自带方法)。现在把整个界面布局粘贴如下:(下面红色为打印所需对话框)
1,两个核心方法:保存和另存为
View Code
private void MainForm_Load(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Maximized;
this.time.Text = DateTime.Now.ToString();
}
/// 保存文件
void SaveText()
{
try
{
saveFileDialog1.FileName = "";
saveFileDialog1.Filter = "文本文件(*.txt)|*.txt";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
string MyFileName = saveFileDialog1.FileName;
StreamWriter sw = new StreamWriter(MyFileName, true, Encoding.Default);
sw.WriteLine(rtxContent.Text);
this.Text = MyFileName.Substring(MyFileName.LastIndexOf("\\") + 1);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{ }
}
//另存为
private void HoldFile()
{
saveFileDialog1.Filter = "文本文件(*.txt)|*.txt";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
StreamWriter sw = new StreamWriter(saveFileDialog1.FileName, false);
sw.WriteLine(rtxContent.Text);
sw.Close();
MessageBox.Show("文件保存成功!", "温馨提示");
}
// 判断是第一次保存还是第二次
if (saveFileDialog1.Equals(""))
{
FileInfo fileInfo = new FileInfo(saveFileDialog1.FileName);
Text = fileInfo.Name + "-记事本";
saveFileDialog1.FileName = fileInfo.Name;
}
else
{
// 把标题改为打开的文件的名称
Text = saveFileDialog1.FileName + "-Mickey记事本";
}
}
2,打开文件,涉及文件读取(文件流读取)
View Code
//打开文件
private void FileMenuOpen_Click(object sender, EventArgs e)
{
try
{
if (rtxContent.Text != "")
{
SaveText(); //检查是否保存当前文件
}
else
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
StreamReader sr = new StreamReader(openFileDialog1.FileName);
rtxContent.Text = sr.ReadToEnd();
sr.Close();
FileInfo fileInfo = new FileInfo(openFileDialog1.FileName);
// 把标题改为打开的文件的名称
Text = "*" + fileInfo.Name + "-白宁超记事本";
openFileDialog1.FileName = fileInfo.Name;
}
}
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
finally { }
}
3,字体颜色设置以及所用对话框
View Code
//设置字体
private void FileMenuFont_Click(object sender, EventArgs e)
{
if (fontDialog1.ShowDialog() == DialogResult.OK)
{
rtxContent.Font = fontDialog1.Font;
}
}
//设置颜色
private void FileMenuColor_Click(object sender, EventArgs e)
{
if ( colorDialog1.ShowDialog() == DialogResult.OK)
{
rtxContent.ForeColor = colorDialog1.Color;
}
}
4,页面设置和打印
View Code
//页面设置
private void FileMenuPage_Click(object sender, EventArgs e)
{
this.pageSetupDialog1.Document = this.printDocument1;
pageSetupDialog1.ShowDialog();
}
//打印
private void FileMenuDY_Click(object sender, EventArgs e)
{
if (rtxContent.Text.Length < 1)
{
MessageBox.Show("请确保要打印的文件的内容不为空!", "温馨提示");
return;
}
else
{
// 设置Document的属性
this.printDialog1.Document = this.printDocument1;
this.printDialog1.PrinterSettings = this.pageSetupDialog1.PrinterSettings;
if (this.printDialog1.ShowDialog() == DialogResult.OK)
{
try
{
this.printDocument1.Print();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
5,窗体视图显示:水平,竖直,层叠
View Code
//多窗体水平显示
private void FileMenuH_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileHorizontal);
}
//多窗体垂直显示
private void FileMenuV_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileVertical);
}
//多窗体层叠显示
private void FileMenuC_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.Cascade);
}
6,根据文本变化而状态变化
View Code
//根据文本变化而状态变化
private void rtxContent_TextChanged(object sender, EventArgs e)
{
this.total.Text = "当前计数" + this.rtxContent.Text.Length.ToString();
}
以下是全部完整代码(经测试可以正常运行)
View Code
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
//窗体加载
private void MainForm_Load(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Maximized;
this.time.Text = DateTime.Now.ToString();
}
/// 保存文件
void SaveText()
{
try
{
saveFileDialog1.FileName = "";
saveFileDialog1.Filter = "文本文件(*.txt)|*.txt";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
string MyFileName = saveFileDialog1.FileName;
StreamWriter sw = new StreamWriter(MyFileName, true, Encoding.Default);
sw.WriteLine(rtxContent.Text);
this.Text = MyFileName.Substring(MyFileName.LastIndexOf("\\") + 1);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{ }
}
//另存为
private void HoldFile()
{
saveFileDialog1.Filter = "文本文件(*.txt)|*.txt";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
StreamWriter sw = new StreamWriter(saveFileDialog1.FileName, false);
sw.WriteLine(rtxContent.Text);
sw.Close();
MessageBox.Show("文件保存成功!", "温馨提示");
}
// 判断是第一次保存还是第二次
if (saveFileDialog1.Equals(""))
{
FileInfo fileInfo = new FileInfo(saveFileDialog1.FileName);
Text = fileInfo.Name + "-记事本";
saveFileDialog1.FileName = fileInfo.Name;
}
else
{
// 把标题改为打开的文件的名称
Text = saveFileDialog1.FileName + "-Mickey记事本";
}
}
//新建
private void FileMenuNew_Click(object sender, EventArgs e)
{
if (rtxContent.Text != "")
{
if (MessageBox.Show("是否保存当前文件?", "温馨提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information)== DialogResult.Yes)
{
// 保存文件
SaveText();
Text = "新建-Mickey记事本";
rtxContent.Text = "";
}
else if (MessageBox.Show("是否保存当前文件?", "温馨提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information)== DialogResult.No)
{
// 用户选择不保存时将输入框中的内容清除
rtxContent.Text = "";
}
}
}
//打开文件
private void FileMenuOpen_Click(object sender, EventArgs e)
{
try
{
if (rtxContent.Text != "")
{
SaveText(); //检查是否保存当前文件
}
else
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
StreamReader sr = new StreamReader(openFileDialog1.FileName);
rtxContent.Text = sr.ReadToEnd();
sr.Close();
FileInfo fileInfo = new FileInfo(openFileDialog1.FileName);
// 把标题改为打开的文件的名称
Text = "*" + fileInfo.Name + "-白宁超记事本";
openFileDialog1.FileName = fileInfo.Name;
}
}
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
finally { }
}
//保存
private void FileMenuSave_Click(object sender, EventArgs e)
{
SaveText();
}
//另存为
private void FileMenuLingcun_Click(object sender, EventArgs e)
{
HoldFile();
}
//关闭
private void FileMenuClose_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show("是否将更改保存?", "温馨提示", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);
if (result == DialogResult.Yes)
{
SaveText();
Application.Exit();
}
else if (result == DialogResult.No)
{
Application.Exit();
}
}
private string selectedInfo = "";//定义选中文本
private void 编辑EToolStripMenuItem_Click(object sender, EventArgs e)
{
if ((rtxContent.SelectedText.Equals("")) && (rtxContent.Equals("")))
{
FileMenuCut.Enabled = false;
FileMenuCopy.Enabled = false;
FileMenuPaste.Enabled = false;
FileMenuDelte.Enabled = false;
}
else
{
FileMenuCut.Enabled = true;
FileMenuCopy.Enabled = true;
FileMenuPaste.Enabled = true;
FileMenuDelte.Enabled = true;
}
}
//复制
private void FileMenuCopy_Click(object sender, EventArgs e)
{
rtxContent.Copy();
}
//剪切
private void FileMenuCut_Click(object sender, EventArgs e)
{
selectedInfo = rtxContent.SelectedText;
rtxContent.Cut();
rtxContent.SelectedText = "";
}
//粘贴
private void FileMenuPaste_Click(object sender, EventArgs e)
{
rtxContent.Paste();
}
//删除
private void FileMenuDelte_Click(object sender, EventArgs e)
{
rtxContent.Text = "";
}
//撤销
private void FileMenuCancel_Click(object sender, EventArgs e)
{
rtxContent.Undo();
}
//选择全部
private void FileMenuAll_Click(object sender, EventArgs e)
{
rtxContent.SelectAll();
}
//显示时间
private void FileMenuTime_Click(object sender, EventArgs e)
{
rtxContent.AppendText(DateTime.Now.ToString());
}
//设置字体
private void FileMenuFont_Click(object sender, EventArgs e)
{
if (fontDialog1.ShowDialog() == DialogResult.OK)
{
rtxContent.Font = fontDialog1.Font;
}
}
//设置颜色
private void FileMenuColor_Click(object sender, EventArgs e)
{
if ( colorDialog1.ShowDialog() == DialogResult.OK)
{
rtxContent.ForeColor = colorDialog1.Color;
}
}
//页面设置
private void FileMenuPage_Click(object sender, EventArgs e)
{
this.pageSetupDialog1.Document = this.printDocument1;
pageSetupDialog1.ShowDialog();
}
//打印
private void FileMenuDY_Click(object sender, EventArgs e)
{
if (rtxContent.Text.Length < 1)
{
MessageBox.Show("请确保要打印的文件的内容不为空!", "温馨提示");
return;
}
else
{
// 设置Document的属性
this.printDialog1.Document = this.printDocument1;
this.printDialog1.PrinterSettings = this.pageSetupDialog1.PrinterSettings;
if (this.printDialog1.ShowDialog() == DialogResult.OK)
{
try
{
this.printDocument1.Print();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
//设置换行
private void FileMenuBr_Click_1(object sender, EventArgs e)
{
if (FileMenuBr.Checked)
{
rtxContent.WordWrap = true;
}
else
{
rtxContent.WordWrap = false;
}
}
//状态栏是否选择
private void FileMenuState_Click(object sender, EventArgs e)
{
statusStrip1.Visible = FileMenuState.Checked;
}
//多窗体水平显示
private void FileMenuH_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileHorizontal);
}
//多窗体垂直显示
private void FileMenuV_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.TileVertical);
}
//多窗体层叠显示
private void FileMenuC_Click(object sender, EventArgs e)
{
LayoutMdi(MdiLayout.Cascade);
}
//帮助
private void FileMenuHelp_Click(object sender, EventArgs e)
{
Form2 f2=new Form2();
f2.Show();
}
//根据文本变化而状态变化
private void rtxContent_TextChanged(object sender, EventArgs e)
{
this.total.Text = "当前计数" + this.rtxContent.Text.Length.ToString();
}
}
运行结果:
1,打开文件
2,设置字体大小-》查看帮助-》保存成功(查看帮助是另外打开的)
4,状态栏变化
作者:白宁超,工学硕士,现工作于四川省计算机研究院,研究方向是自然语言处理和机器学习。曾参与国家自然基金项目和四川省科技支撑计划等多个省级项目。著有《自然语言处理理论与实战》一书。 自然语言处理与机器学习技术交流群号:436303759 。
出处:http://www.cnblogs.com/baiboy/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。