记事本程序
Anchor:控件与容器周围的距离保持不变
Dock:定义容器要停靠到哪一边,重要的一个是Fill填充
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; namespace 简单记事本 { public partial class Form1 : Form { private bool IsSave = false; string fileName = null; public Form1() { InitializeComponent(); this.Text = "无标题-猫的记事本"; } private void 新建NToolStripMenuItem_Click(object sender, EventArgs e) { if (IsSave == true) { DialogResult re = MessageBox.Show("是否将更改保存到 " + this.Text.Substring(0, this.Text.Length - 6) + "?", "询问", MessageBoxButtons.YesNoCancel); if (re == DialogResult.Yes) { SaveFile(); } else if(re == DialogResult.Cancel) { return;//什么也不做,直接返回 } } txtText.Text = ""; fileName = ""; this.Text = "无标题-猫的记事本"; } private void toolStripMenuItem1_Click(object sender, EventArgs e) { //打开文件 OpenFileDialog ofd = new OpenFileDialog(); ofd.Title = "打开文件"; ofd.Filter = "文本文件|*.txt|所有文件|*.*"; //读取文件步骤: //1. 声明文件流,即在内存申请一个空间,让文件和这个空间建立联系 //2. 创建读写器,用来操作文件流对象 //3. 读操作 //4. 释放读取器 //5. 释放文件流对象 if(ofd.ShowDialog() == DialogResult.OK) { //一打开指定文件,则立刻修改标题为文件名 fileName = ofd.FileName; // 只显示文件名,不显示文件路径 this.Text = fileName.Substring(fileName.IndexOf("\\") + 1) + "-猫的记事本"; //1 声明文件流 // 1文件路径,2,3打开-读取,4打开文件后,其他进程对此文件的操作 FileStream fs = new FileStream(ofd.FileName, FileMode.Open,FileAccess.Read,FileShare.Read); //fs创建了与文件相连的通道,而sr可用来操纵fs,进行文件的读取 //2 创建读写器 //StreamReader形参类型是Stream类,故可以接受其子类FileStream //StreamReader(fst)英文可以正常,汉字不能正常时,为编码问题,添加编码方式 StreamReader sr = new StreamReader(fs,Encoding.Default); //3 读取 //sr.ReadLine();//读取一行 //sr.ReadToEnd();//读取到最后 //sr.EndOfStream; while(sr.EndOfStream == false) { string line = sr.ReadLine() + "\r\n"; txtText.Text += line; } //或者一次性读完 //txtText.Text = sr.ReadToEnd(); //4 关闭 sr.Close(); fs.Close(); IsSave = false; } } private void 保存SToolStripMenuItem_Click(object sender, EventArgs e) { SaveFile(); } private void 退出EToolStripMenuItem_Click(object sender, EventArgs e) { this.Close(); } private void SaveFile() { //写入文件步骤: //1. 声明文件流,即在内存申请一个空间,让文件和这个空间建立联系 //2. 创建写入器,用来操作文件流对象 //3. 写操作 //4. 释放写入器 //5. 释放文件流对象 if(fileName == null || fileName == "") { SaveFileDialog sfd = new SaveFileDialog(); sfd.Title = "保存文件"; sfd.Filter = "文本文件|*.txt|所有文件|*.*"; if (sfd.ShowDialog() == DialogResult.OK) { fileName = sfd.FileName; this.Text = fileName.Substring(fileName.IndexOf("\\") + 1) + "-猫的记事本"; } else { MessageBox.Show("文件打开失败!"); return; } } FileStream fs = new FileStream(fileName, FileMode.Create); StreamWriter sw = new StreamWriter(fs, Encoding.Default); sw.Write(txtText.Text); //sw写磁盘文件时,先写内存的fs,只有将 fs填满或者执行了sw关闭才将fs中内容写入磁盘 sw.Close(); fs.Close(); IsSave = false; } private void txtText_TextChanged(object sender, EventArgs e) { IsSave = true; } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (IsSave == true) { DialogResult re = MessageBox.Show("是否将更改保存到 "+this.Text.Substring(0,this.Text.Length - 6)+"?", "询问", MessageBoxButtons.YesNoCancel); if (re == DialogResult.Yes) { SaveFile(); } else if (re == DialogResult.No) { } else { e.Cancel = true; } IsSave = false; } } private void 复制ToolStripMenuItem_Click(object sender, EventArgs e) { txtText.Copy(); } private void 剪切ToolStripMenuItem_Click(object sender, EventArgs e) { txtText.Cut(); } private void 粘贴ToolStripMenuItem_Click(object sender, EventArgs e) { txtText.Paste(); } private void 查找ToolStripMenuItem_Click(object sender, EventArgs e) { int currPos = txtText.SelectionStart;//选中的当前位置 int findPos = txtText.Text.IndexOf("aa", currPos); if(findPos != -1) { txtText.Select(findPos, 2); } } private void 字体ToolStripMenuItem_Click(object sender, EventArgs e) { FontDialog fd = new FontDialog(); fd.Font = txtText.Font; if(fd.ShowDialog() == DialogResult.OK) { txtText.Font = fd.Font; } } private void 字体颜色ToolStripMenuItem_Click(object sender, EventArgs e) { ColorDialog cd = new ColorDialog(); cd.Color = txtText.ForeColor; if(cd.ShowDialog() == DialogResult.OK) { txtText.ForeColor = cd.Color; } } private void 背景颜色ToolStripMenuItem_Click(object sender, EventArgs e) { ColorDialog cd = new ColorDialog(); cd.Color = txtText.BackColor; if (cd.ShowDialog() == DialogResult.OK) { txtText.BackColor = cd.Color; } } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { //关闭后创建配置文件,记录文档的位置信息 int x = this.Location.X; int y = this.Location.Y; int w = this.Size.Width; int h = this.Size.Height; //此时自动创建文件流对象 StreamWriter sw = new StreamWriter(Application.StartupPath + "\\app.dll", false); sw.WriteLine(x.ToString()); sw.WriteLine(y.ToString()); sw.WriteLine(w.ToString()); sw.WriteLine(h.ToString()); sw.Close(); } private void Form1_Load(object sender, EventArgs e) { //是否有配置文件,如果有则读取 string appPath = Application.StartupPath + "\\app.dll"; if(File.Exists(appPath)) { StreamReader sr = new StreamReader(appPath); int x = Convert.ToInt32(sr.ReadLine()); int y = Convert.ToInt32(sr.ReadLine()); int w = Convert.ToInt32(sr.ReadLine()); int h = Convert.ToInt32(sr.ReadLine()); this.Location = new Point(x, y); this.Size = new Size(w, h); sr.Close(); } } } }