VS中用C#編寫簡單記事本
一、前言
這應該算是C#窗體介面程式設計的一個小實驗把
二、實現
首先先拉一個窗體,再拖一些控制元件(menuStrip,contextMenuStrip,timer,richTextBox)
然後介面暫時設定成這個樣子。
相應的屬性、熱鍵、快捷鍵自己設定好,細心點,需要點時間,應該不難。
完成了介面的設定和屬性的設定,基本完成了1/3
接下來就是功能的實現。
【0】當載入窗體UI的時候
//注意設定的私有成員名稱,後面將會用到,名字可以自己設定 private OpenFileDialog od = new OpenFileDialog(); private SaveFileDialog sd = new SaveFileDialog(); private bool richboxTextHasChanged = false; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { od.FileName = ""; od.Filter = "TXT FILE(*.txt)|*.txt"; sd.Filter = "TXT FILE(*.txt)|*.txt"; label2.Text = "時間:" + DateTime.Now.ToLongTimeString().ToString(); timer1.Enabled = true; timer1.Interval = 100; }
注意裡面設定的私有成員噢,後面將會泳道。
【1】當點選新建功能的時候
private void 新建ToolStripMenuItem_Click(object sender, EventArgs e) { if (od.FileName != "" && richboxTextHasChanged == true && MessageBox.Show("文字內容已更改\n是否儲存修改?", "資訊提示", MessageBoxButtons.OKCancel) == System.Windows.Forms.DialogResult.OK) {//若文字改動,首先儲存 richTextBox1.SaveFile(od.FileName, RichTextBoxStreamType.PlainText); } //不然初始化介面 od.FileName = ""; this.Text = "記事本"; this.richTextBox1.Clear(); this.richboxTextHasChanged = false; }
【2】當點選開啟功能的時候
private void 開啟ToolStripMenuItem_Click(object sender, EventArgs e) { od.ShowDialog();//選擇開啟文字檔案 if (od.FileName != "") { //將文字檔案裡面的內容載入到介面內 richTextBox1.LoadFile(od.FileName, RichTextBoxStreamType.PlainText); this.Text = od.FileName + "-記事本"; } }
【3】當點選儲存功能的時候
private void 儲存ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (od.FileName != "")
{
richTextBox1.SaveFile(od.FileName, RichTextBoxStreamType.PlainText);
}
else
MessageBox.Show("請先開啟文字檔案", "資訊提示", MessageBoxButtons.OK);
}
【4】當點選另存為功能的時候
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
if (sd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
richTextBox1.SaveFile(sd.FileName, RichTextBoxStreamType.PlainText);
}
}
【5】當點選退出功能的時候
private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Dispose();
this.Close();
}
【6】當點選剪下功能的時候
private void 剪下ToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Cut();
}
【7】當點選複製功能的時候
private void 複製ToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Copy();
}
【8】當點選貼上功能的時候
private void 貼上ToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.Paste();
}
【9】當點選字型功能的時候
private void 字型ToolStripMenuItem_Click(object sender, EventArgs e)
{//設定字型
FontDialog fd = new FontDialog();
fd.ShowDialog();
richTextBox1.Font = fd.Font;
}
【10】當點選全選功能的時候
private void 全選AToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.SelectAll();
}
【11】當點選日期功能的時候
private void 時間日期DToolStripMenuItem_Click(object sender, EventArgs e)
{
richTextBox1.AppendText(System.DateTime.Now.ToString());
}
將會在文字後面追加上當前日期時間資訊。
【12】當點選檢視幫助功能的時候
private void 檢視幫助ToolStripMenuItem_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("https://answers.microsoft.com/en-us/windows/forum/apps_windows_10");
}
這時候提供一個網址,就是會開啟記事本的幫助網頁。
【13】點選關於記事本的時候
private void 關於記事本AToolStripMenuItem_Click(object sender, EventArgs e)
{
//這裡的AboutBox是自己編寫的一個介面,呼叫就好,裡面隨便寫寫自己這個記事本的版本資訊啥的就可以了
AboutBox.Form1 about = new AboutBox.Form1();
about.ShowDialog();
}
這裡的AboutBox是自己編寫的一個介面,呼叫這個介面就好,裡面隨便寫寫自己這個記事本的版本資訊啥的就可以了。
例如:我的
ContextMenuStrip裡面的功能同上一樣實現,相應的拷貝一下就好了。
【14】richTextBox監聽事件1
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
richboxTextHasChanged = true;
}
給richTextBox設定一個事件,當文字內容改變的時候,就將richboxTextHasChanged設定為true表明文字內容有改動
【15】richTextBox監聽事件2
private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
if (richTextBox1.SelectedText != "")//如果滑鼠選中了文字內容
{
this.剪下ToolStripMenuItem.Enabled = true;
this.複製ToolStripMenuItem.Enabled = true;
this.剪下TToolStripMenuItem.Enabled = true;
this.複製CToolStripMenuItem.Enabled = true;
}
else//如果滑鼠沒有選中文字內容
{
this.剪下ToolStripMenuItem.Enabled = false;
this.複製ToolStripMenuItem.Enabled = false;
this.剪下TToolStripMenuItem.Enabled = false;
this.複製CToolStripMenuItem.Enabled = false;
}
}
有些功能只有在選中了文字的時候才能使用,我們設定一個這樣的監聽事件,當有文字被選中的時候,就將這些功能起作用,否則不能讓這些功能起作用。
【16】右下角顯示時間資訊
private void timer1_Tick(object sender, EventArgs e)
{
//沒隔一段時間更新下時間資訊
label2.Text = "時間:"+DateTime.Now.ToLongTimeString().ToString();
}
更新時間資訊,讓時間及時更新。
【17】richTextBox監聽事件3
//滑鼠點選的時候觸發
private void richTextBox1_MouseDown(object sender, MouseEventArgs e)
{
int index = richTextBox1.GetFirstCharIndexOfCurrentLine();
int line = richTextBox1.GetLineFromCharIndex(index) + 1;
int col = richTextBox1.SelectionStart - index + 1;
label1.Text = "第 " + line.ToString() + " 行,第 " + col.ToString() + " 列";
}
//首次按下某個鍵的時候觸發
private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
int index = richTextBox1.GetFirstCharIndexOfCurrentLine();
int line = richTextBox1.GetLineFromCharIndex(index) + 1;
int col = richTextBox1.SelectionStart - index + 1;
label1.Text = "第 " + line.ToString() + " 行,第 " + col.ToString() + " 列";
}
通過這兩個監聽事件,讓左下角的標籤時刻顯示出當前正在編輯的行列數。
三、執行效果
【1】開啟功能
【2】編輯文字時
【3】幫助功能
【4】關於記事本功能
其他功能不再演示(過於佔版面),大概跟記事本差不多,雖然比真的記事本弱很多。
四、實驗總結
通過此次實驗我加深了對MenuStrip,ContextMenuStrip,RichText,FontDialog,OpenFileDialog,SaveFileDialog等控制元件的使用,以及對RichText的Cut、Clear、Copy、Paste等方法熟悉。
最後我實現了相應的窗體的構造,下拉框、彈出框都先構造其框架,再加上其熱鍵和快捷鍵,最後實現其功能
最後不僅實現了上面老師要求的一些東西,還自己加上了時間的顯示以及當前滑鼠所在行列的顯示
功能都相應的實現了,通過此次實驗我學到了實際的操作,進步很大,也深深體會到了VS用C#編輯窗體程式真的很強大。
執行情況如上截圖
最後感覺自己編寫出了一個最最最簡單的記事本出來了。
菜雞進步史······runing······