一.功能说明
使用Visual C#设计一个Windows应用程序——记事本。设计的记事本除Windows自带的记事本的部分功能外,并且还可以任意更改字体的字体类型、大小和颜色,并在状态栏中显示时间。为了方便用户的操作,还在程序的窗体上放置了一个工具栏。
二.设计流程
1.界面设计
对form的属性进行更改后,再在窗体上分别放入MenuStrip(菜单控件)、ToolStrip(工具栏控件)、RichTextBox(多格式文本框控件)、StatusStrip(状态栏控件)、OpenFileDialog(打开对话框)、SaveFileDialog(保存对话框)、FontDialog(字体对话框)、Timer(计时器控件),并对其属性进行合适的更改,从而实现记事本的界面。设计好的记事本界面如下。
2.代码编写
首先在代码的通用段声明以下两个公共变量,他们都是布尔型的,“b”用于判断文件是新建的 还是从磁盘打开的,“s”用于判断文件是否被保存。 此后,通过对s和b的判断和修改以及特 定的操作来实现记事本相应的功能。
3.关于记事本
接下来单击Visual C# 2013的【项目】→【添加Windows窗体】菜单项,添加一个名为 “frmAbout”的窗体,然后给窗体“frmAbout”添加几个Label、Button、LinkLabel和PictrueBox 控件,设置好相应的属性后的程序界面如下所示。
然后对此部分利用LinkLabel控件进行代码编写。
4.工具栏编写
工具栏提供了一些快捷按钮,用来方便用户的操作,用户按下按钮时相当于选择了某个菜单项, 用switch语句实现如下,双击工具栏的空白部位,编写工具栏的ItemClicked事件代码 。
5.计时器代码
要在状态栏的tssLbl2中显示当前时间,需要编写计时器控件的Tick事件(每秒钟触发一次)代 码。
6.窗体代码
在改变窗体大小时(例如最大化窗口或使用鼠标改变窗口大小),为了使状态栏中的标签也随之 改变其宽度,应当编写窗体的SizeChanged事件代码。
三.关键源码展示
namespace _111
{
public partial class frmNotepad : Form
{
bool b = false;
bool s = true;
public frmNotepad()
{
InitializeComponent();
}
private void rtxtNotepad_TextChanged(object sender, EventArgs e)
{
s = false;
}
private void tlsNotepad_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
int n;
n = tlsNotepad.Items.IndexOf(e.ClickedItem);
switch (n)
{
case 0:新建NToolStripButton_Click(sender, e); break;
case 1:打开OToolStripButton_Click(sender, e); break;
case 2:保存SToolStripButton_Click(sender, e); break;
case 3:tsmiCopy_Click(sender, e); break;
case 4:剪切UToolStripButton_Click(sender, e);break;
case 5:粘贴PToolStripButton_Click(sender,e); break;
case 6:tsmiPaste_Click(sender, e); break;
case 7:tsmiAbout_Click(sender, e); break;
}
}
private void mnusNotepad_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
}
private void tsmiNew_Click(object sender, EventArgs e)
{
if (b == true || rtxtNotepad.Text.Trim() != "")
{
if (s == false)
{
string result;
result = MessageBox.Show("文件尚未保存,是否保存?", "保存文件", MessageBoxButtons.YesNoCancel).ToString();
switch (result)
{
case "Yes":
if (b == true)
rtxtNotepad.SaveFile(odlgNotepad.FileName);
else if (sdlgNotepad.ShowDialog() == DialogResult.OK)
rtxtNotepad.SaveFile(sdlgNotepad.FileName);
s = true;
rtxtNotepad.Text = "";
break;
case "No":
b = false;
rtxtNotepad.Text = "";
break;
}
}
}
}
private void tsmiOpen_Click(object sender, EventArgs e)
{
if (b == true || rtxtNotepad.Text.Trim() != "")
{
if (s == false)
{
string result;
result = MessageBox.Show("文件尚未保存,是否保存?", "保存文件", MessageBoxButtons.YesNoCancel).ToString();
switch (result)
{
case "Yes":
if (b == true)
rtxtNotepad.SaveFile(odlgNotepad.FileName);
else if (sdlgNotepad.ShowDialog() == DialogResult.OK)
rtxtNotepad.SaveFile(sdlgNotepad.FileName);
s = true;
break;
case "No":
b = false;
rtxtNotepad.Text = "";
break;
}
}
}
odlgNotepad.RestoreDirectory = true;
if ((odlgNotepad.ShowDialog() == DialogResult.OK) && odlgNotepad.FileName != "")
{
rtxtNotepad.LoadFile(odlgNotepad.FileName);
b = true;
}
s = true;
}
private void tsmiSave_Click(object sender, EventArgs e)
{
if (b == true && rtxtNotepad.Modified == true)
{
rtxtNotepad.SaveFile(odlgNotepad.FileName);
s = true;
}
else if (b == false && rtxtNotepad.Text.Trim() != "" && sdlgNotepad.ShowDialog() == DialogResult.OK)
{
rtxtNotepad.SaveFile(sdlgNotepad.FileName);
s = true;
b = true;
odlgNotepad.FileName = sdlgNotepad.FileName;
}
}
private void tsmiSaveAs_Click(object sender, EventArgs e)
{
if (sdlgNotepad.ShowDialog() == DialogResult.OK)
{
rtxtNotepad.SaveFile(sdlgNotepad.FileName);
s = true;
}
}
private void tsmiClose_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void tsmiUndo_Click(object sender, EventArgs e)
{
rtxtNotepad.Undo();
}
private void tsmiCopy_Click(object sender, EventArgs e)
{
rtxtNotepad.Copy();
}
private void tsmiCut_Click(object sender, EventArgs e)
{
rtxtNotepad.Cut();
}
private void tsmiPaste_Click(object sender, EventArgs e)
{
rtxtNotepad.Paste();
}
private void tsmiSElectAll_Click(object sender, EventArgs e)
{
rtxtNotepad.SelectAll();
}
private void tsmiDate_Click(object sender, EventArgs e)
{
rtxtNotepad.AppendText(System.DateTime.Now.ToString());
}
private void tsmiFormat_Click(object sender, EventArgs e)
{
if (tsmiAuto.Checked == false)
{
tsmiAuto.Checked = true;
rtxtNotepad.WordWrap = true;
}
else
{
tsmiAuto.Checked = false;
rtxtNotepad.WordWrap = false;
}
}
private void tsmiFont_Click(object sender, EventArgs e)
{
fdlgNotepad.ShowColor = true;
if (fdlgNotepad.ShowDialog() == DialogResult.OK)
{
rtxtNotepad.SelectionColor = fdlgNotepad.Color;
rtxtNotepad.SelectionFont = fdlgNotepad.Font;
}
}
private void tsmiToolStrip_Click(object sender, EventArgs e)
{
Point point;
if (tsmiToolStrip.Checked == true)
{
point = new Point(0, 24);
tsmiToolStrip.Checked = false;
tlsNotepad.Visible = false;
rtxtNotepad.Location = point;
rtxtNotepad.Height += tlsNotepad.Height;
}
else
{
point = new Point(0, 49);
tsmiToolStrip.Checked = true;
tlsNotepad.Visible = true;
rtxtNotepad.Location = point;
rtxtNotepad.Height -= tlsNotepad.Height;
}
}
private void tsmiStatusStrip_Click(object sender, EventArgs e)
{
if (tsmiStatusStrip.Checked == true)
{
tsmiStatusStrip.Checked = false;
stsNotepad.Visible = false;
rtxtNotepad.Height += stsNotepad.Height;
}
else
{
tsmiStatusStrip.Checked = true;
stsNotepad.Visible = true;
rtxtNotepad.Height -= stsNotepad.Height;
}
}
private void tsmiAbout_Click(object sender, EventArgs e)
{
frmAbout ob_FrmAbout = new frmAbout();
ob_FrmAbout.Show();
}
private void tmrNotepad_Tick(object sender, EventArgs e)
{
tssLbl2.Text = System.DateTime.Now.ToString();
}
private void frmNotepad_SizeChanged(object sender, EventArgs e)
{
frmNotepad ob_frmNotepad = new frmNotepad();
tssLbl1.Width = this.Width;
tssLbl2.Width = this.Width;
}
private void 新建NToolStripButton_Click(object sender, EventArgs e)
{
}
private void 打开OToolStripButton_Click(object sender, EventArgs e)
{
}
private void 保存SToolStripButton_Click(object sender, EventArgs e)
{
}
private void 剪切UToolStripButton_Click(object sender, EventArgs e)
{
}
private void 复制CToolStripButton_Click(object sender, EventArgs e)
{
}
private void 粘贴PToolStripButton_Click(object sender, EventArgs e)
{
}
}
}
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;
namespace _111
{
public partial class frmAbout : Form
{
public frmAbout()
{
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e)
{
}
private void btnOK_Click(object sender, EventArgs e)
{
this.Close();
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start("http://www.baidu.com");
}
}
}
四.总结
通过本次学习,我能够更熟练地运用各个控件以及能够根据目的对控件的属性等内容进行更 改,以达到界面的设计要求。同时,我也能够编写代码实现控件的功能。在不了解使用什么事 件、属性、方法时,我也学会通过看vs给的提示以及网上查询可以解决问题。在实验过程中遇 到错误时,我也能够通过网络查询得以改正。
五.源码开源地址