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