控件说明:
menustrip1为菜单选项,openfiledialog1为打开文件,savefiledialog1为保存文件,fontdialog1为字体控件。
运行截图:
核心代码说明:
StreamWriter wt = new StreamWriter(openFileDialog1.FileName);
wt.Write(richTextBox1.Text);
wt.Close();
//此代码为将text内容写入相关文件
string path = openFileDialog1.FileName;
StreamReader sr = new StreamReader(path, Encoding.UTF8);
string text = sr.ReadToEnd();
richTextBox1.Text = text;
this.Text = path;//将打开的路径写入当前窗体的text属性中
sr.Close();
//此代码为将相关文件内容写入到richTextBox控件来进行相关修改
private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void 撤销ToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Undo();//撤销
}
private void 复制ToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Copy();//复制
}
private void 粘贴ToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Paste();//粘贴
}
private void 剪切ToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Cut();//剪切
}
private void 全选ToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.SelectAll();//全选
}
这些是一些简单操作的控件代码。
主窗体Form.cs代码:
namespace notepad
{
public partial class Form1 : Form
{
/* 布尔变量b用于判断文件是新建的还是从磁盘打开的,true表示文件是从磁盘打开的,false表示文件是新建的,默认值为false*/
bool b = false;
/* 布尔变量s用于判断文件件是否被保存,true表示文件是已经被保存了,false表示文件未被保存,默认值为true*/
bool s = true;
public Form1()
{
InitializeComponent();
}
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
// 文本被修改后,设置s为false,表示文件未保存
s = false;
}
private void 新建ToolStripMenuItem_Click(object sender, EventArgs e)
{
// 判断当前文件是否从磁盘打开,或者新建时文档不为空,并且文件未被保存
if (b == true || richTextBox1.Text.Trim() != "")
{
// 若文件未保存
if (s == false)
{
string result;
result = MessageBox.Show("文件尚未保存,是否保存?", "保存文件", MessageBoxButtons.YesNoCancel).ToString();
switch (result)
{
case "Yes":
// 若文件是从磁盘打开的
if (b == true)
{
// 按文件打开的路径保存文件
//richTextBox1.SaveFile(openFileDialog1.FileName);
StreamWriter wt = new StreamWriter(openFileDialog1.FileName);
wt.Write(richTextBox1.Text);
wt.Close();
}
// 若文件不是从磁盘打开的
else if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
//richTextBox1.SaveFile(saveFileDialog1.FileName);
StreamWriter wt = new StreamWriter(saveFileDialog1.FileName);
wt.Write(richTextBox1.Text);
wt.Close();
}
s = true;
richTextBox1.Text = "";
break;
case "No":
b = false;
richTextBox1.Text = "";
break;
}
}
}
}
private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (b == true || richTextBox1.Text.Trim() != "")
{
if (s == false)
{
string result;
result = MessageBox.Show("文件尚未保存,是否保存?","保存文件", MessageBoxButtons.YesNoCancel).ToString();
switch (result)
{
case "Yes":
if (b == true)
{
//richTextBox1.SaveFile(openFileDialog1.FileName);
StreamWriter wt = new StreamWriter(openFileDialog1.FileName);
wt.Write(richTextBox1.Text);
wt.Close();
}
else if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
// richTextBox1.SaveFile(saveFileDialog1.FileName);
StreamWriter wt = new StreamWriter(saveFileDialog1.FileName);
wt.Write(richTextBox1.Text);
wt.Close();
}
s = true;
break;
case "No":
b = false;
richTextBox1.Text = "";
break;
}
}
}
openFileDialog1.RestoreDirectory = true;
if ((openFileDialog1.ShowDialog() == DialogResult.OK) && openFileDialog1.FileName != "")
{
//richTextBox1.LoadFile(openFileDialog1.FileName);//打开代码语句
string path = openFileDialog1.FileName;
//通用编码
StreamReader sr = new StreamReader(path, Encoding.UTF8);
//读取数据流
string text = sr.ReadToEnd();
richTextBox1.Text = text;
//将打开的路径写入当前窗体的text属性中
this.Text = path;
sr.Close();
b = true;
}
s = true;
}
private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
{
//由于这个没有改Name属性,所以和图片不太一样,对照就行
// 若文件从磁盘打开并且修改了其内容
if (b == true && richTextBox1.Modified == true)
{
//richTextBox1.SaveFile(openFileDialog1.FileName);
StreamWriter wt = new StreamWriter(this.Text);
wt.Write(richTextBox1.Text);
wt.Close();
s = true;
}
else if (b == false && richTextBox1.Text.Trim() != "" && saveFileDialog1.ShowDialog() == DialogResult.OK)
{
//richTextBox1.SaveFile(saveFileDialog1.FileName);//保存语句
StreamWriter wt = new StreamWriter(saveFileDialog1.FileName);
wt.Write(richTextBox1.Text);
wt.Close();
s = true;
b = true;
openFileDialog1.FileName = saveFileDialog1.FileName;
}
}
private void 另存为ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
// richTextBox1.SaveFile(saveFileDialog1.FileName);
StreamWriter wt = new StreamWriter(saveFileDialog1.FileName);
wt.Write(richTextBox1.Text);
wt.Close();
s = true;
}
}
private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void 撤销ToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Undo();//撤销
}
private void 复制ToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Copy();//复制
}
private void 粘贴ToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Paste();//粘贴
}
private void 剪切ToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Cut();//剪切
}
private void 全选ToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.SelectAll();//全选
}
private void 日期ToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.AppendText(System.DateTime.Now.ToString());//显示当前日期
}
private void 自动换行ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (自动换行ToolStripMenuItem.Checked == false)
{
自动换行ToolStripMenuItem.Checked = true; // 选中该菜单项
richTextBox1.WordWrap = true; // 设置为自动换行
}
else
{
自动换行ToolStripMenuItem.Checked = false;
richTextBox1.WordWrap = false;
}
}
private void 字体ToolStripMenuItem_Click(object sender, EventArgs e)
{
fontDialog1.ShowColor = true;
if (fontDialog1.ShowDialog() == DialogResult.OK)
{
richTextBox1.SelectionColor = fontDialog1.Color;
richTextBox1.SelectionFont = fontDialog1.Font;
}
}
private void 关于记事本ToolStripMenuItem_Click(object sender, EventArgs e)
{
frmAbout ob_FrmAbout = new frmAbout();
ob_FrmAbout.Show();
}
}
}
运行效果:
经过测试没有错误。
小结:C#窗体控件可以组合来使用以完成一系列相关操作,这为我们的开发提供了便捷。通过这次实验我对控件有了大致的了解以及对控件的相关属性和事件有了把握,比如读写文件控件、输入输出流控件以及一些基本的label、button等控件。