學(xué)習(xí)用C#創(chuàng)建一個(gè)簡(jiǎn)單的文本編輯器——Shawn&Cheney Editor。 1.創(chuàng)建一個(gè)工程,命名為SimpleEditor
2.把生成的文件Form1.cs重命名為SimpleEditorForm
3.設(shè)置窗體屬性:
Text:Shawn&Cheney Editor
Icon:選擇一個(gè)自定義圖標(biāo)
4.給窗體添加一個(gè)菜單欄和一個(gè)richTextBox控件
設(shè)置richTextBox控件屬性如下
屬性
值
Name
TextBoxEdit
Text
Multiline
True
Dock
Fill
ScollBars
Both
AcceptsReturn
True
AcceptsTab
True
5.給菜單項(xiàng)添加“新建”、“打開(kāi)”、“保存”、“另存為”項(xiàng)目,分別設(shè)置好各自屬性。
6.首先在SimpleEditorForm類中定義一個(gè)成員變量filename,用來(lái)接收文件
public partial class SimpleEditorForm : Form
{
private string filename = "Untitled";
…………
}
7.修改SimpleEditorForm構(gòu)造函數(shù),使其接收一個(gè)文件名參數(shù)
public SimpleEditorForm(string filename)
{
InitializeComponent();
if (filename != null)
{
this.filename = filename;
OpenFile();
}
//如果接收到一個(gè)不為null的參數(shù),就給前面定義的成員變量filename賦值
//然后調(diào)用OpenFile函數(shù),這個(gè)函數(shù)接下來(lái)將會(huì)給出定義。
}
8.修改Program.cs中的main函數(shù),使得main()可以給SimpleEditorForm傳遞filename參數(shù)
static void Main(string[] args)
{
string filename = null;
if (args.Length != 0)
filename = args[0];
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new SimpleEditorForm(filename));
}
//如果本程序執(zhí)行時(shí)帶有參數(shù)(即給定了文件名),則這里會(huì)把這個(gè)文件名傳遞給SimpleEditorForm
//否則,將傳遞一個(gè)空值
9.給出OpenFile()方法的實(shí)現(xiàn),將OpenFile()作為SimpleEditorForm的成員函數(shù)
public partial class SimpleEditorForm : Form
{
………………
protected void OpenFile()
{
try
{
TextBoxEdit.Clear();
TextBoxEdit.Text = File.ReadAllText(filename);
}
catch (IOException ex)
{
MessageBox.Show(ex.Message, "Simple Editor",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
………………
}
由于這里使用了File類,所以必須添加using System.IO命名空間
10.給菜單項(xiàng)“新建”添加處理程序
private void MenuItemNew_Click(object sender, EventArgs e)
{
filename = "Untitled"; //新建的文件文件名應(yīng)該是Untitled
TextBoxEdit.Clear(); //調(diào)用Clear()方法清空文本框
}
現(xiàn)在,已經(jīng)可以通過(guò)這個(gè)程序來(lái)打開(kāi)文件了
要給應(yīng)用程序添加命令行參數(shù),可以通過(guò)下面的方法:
在Solution Explorer中右擊項(xiàng)目,點(diǎn)擊“屬性”,點(diǎn)擊“調(diào)試”,輸入命令行參數(shù)
本例中輸入F:\CSharpPro\my6thPro\SimpleEditor\SimpleEditor\SimpleEditorForm.cs
運(yùn)行程序,可以看到文件已經(jīng)被打開(kāi)了
下面我們接著說(shuō)如何實(shí)現(xiàn)“打開(kāi)”、“保存”、“另存為”菜單項(xiàng)的功能。
1.創(chuàng)建“打開(kāi)”菜單項(xiàng)處理程序
首先將工具箱中的OpenFileDialog空間拖動(dòng)到編輯區(qū)底部灰色區(qū)域,然后設(shè)置其屬性:
Name:dlgOpenFile
Filter:Text Documents (*.txt)|*.txt|ShawnCheney Documents (*.shawney)|*.shawnney|All Files|*.*
FilterIndex:2
然后雙擊菜單項(xiàng)中的“打開(kāi)”項(xiàng),添加如下代碼:
private void MenuItemOpen_Click(object sender, EventArgs e)
{
if (dlgOpenFile.ShowDialog() == DialogResult.OK)
{
filename = dlgOpenFile.FileName;
OpenFile();
}
}
//dlgOpenFile.ShowDialog() 將會(huì)打開(kāi)“打開(kāi)”對(duì)話框,
//如果點(diǎn)擊了OK,則讀取 dlgOpenFile.FileName屬性,獲得文件名
//最后調(diào)用OpenFile()方法打開(kāi)文件。
2.保存文件
與前面類似,拖動(dòng)SaveFileDialog控件到編輯區(qū)底部灰色區(qū)域,設(shè)置其屬性
Name:dlgSaveFile
Filter:Text Documents (*.txt)|*.txt|ShawnCheney Documents (*.shawney)|*.shawnney
FilterIndex:2
給“另存為”菜單項(xiàng)添加事件處理程序
private void MenuItemSaveAs_Click(object sender, EventArgs e)
{
if (dlgSaveFile.ShowDialog() == DialogResult.OK)
{
filename = dlgSaveFile.FileName;
SaveFile();
}
}
//與前面類似,如果對(duì)話框返回OK值,則從dlgSaveFile.FileName獲得文件名
//然后調(diào)用SaveFile()方法保存文件。
創(chuàng)建SaveFile()方法,由于保存的時(shí)候可能會(huì)產(chǎn)生很多問(wèn)題,因此,放在try塊內(nèi)!
private void SaveFile()
{
try
{
File.WriteAllText(filename, TextBoxEdit.Text);
}
catch (IOException ex)
{
MessageBox.Show(ex.Message, "Shawn&Cheney Editor",
MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
}
}
至此,“另存為”功能實(shí)現(xiàn)了。
為什么不為“保存”按鈕添加上面那個(gè)處理程序呢?
原因在于,如果用戶點(diǎn)擊“保存”按鈕時(shí),當(dāng)前的文檔不是一個(gè)用戶新建的文檔,或者說(shuō)當(dāng)前文檔時(shí)一個(gè)已經(jīng)擁有文件名的文檔,那么是不需要用戶輸入文件名的!而“另存為”按鈕,則無(wú)論什么情況都需要用戶輸入文件名。所以“另存為”按鈕相對(duì)來(lái)說(shuō)邏輯比較簡(jiǎn)單。
3.下面來(lái)實(shí)現(xiàn)“保存”按鈕。
private void MenuItemSave_Click(object sender, EventArgs e)
{
if (filename == "Untitled")
{
MenuItemSaveAs_Click(sender, e);
//如果當(dāng)前文檔文件名是Untitled,點(diǎn)擊“保存”和點(diǎn)擊“另存為”效果一樣
//所以調(diào)用“另存為”按鈕的處理函數(shù)MenuItemSaveAs_Click()函數(shù)。
}
else
{
SaveFile();
//否則就直接保存。
}
}
到此為止,一個(gè)具有新建打開(kāi)保存功能的簡(jiǎn)單文本編輯器就做好了。