1. 程式人生 > >VS中用C#編寫簡單記事本

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······