用C#編寫一個簡單記事本程序(上)

概述
這裏主要是模仿記事本的簡單功能,因爲實際一個記事本的功能還是相當多的,包括改變字體、查找、改變顏色等等。這裏主要實現記事本裝載文件、保存文件及快捷鍵設置等功能。如果想編寫一個功能齊全的記事本應用可以在其基礎上擴展功能模塊,只要對C#進一步學習,擴展並非難事。
代碼的大部分註釋十分詳盡,我儘可能少說廢話。讓你感受到自己理解程序過程中的喜悅。下面我們開始!
博文最後給出實現的源文件下載鏈接!
最終實現效果
這裏寫圖片描述
涉及到的C#控件
用C#的可視化編程是十分方便的,不需要陷入Windows編程的漩渦中。這個小項目用到的控件‘屈指可數’,主體編輯區(或叫客戶區)是一個RichTextBox(豐富文本框),另外的控件看下面的圖片吧!
這裏寫圖片描述
沒錯,是些對話框控件和菜單控件,因爲我們在記事本的底邊加了個電子錶(什麼你沒看到?),所以我們需要一個Timer控件,至於菜單中更細化的組成部分則在下圖中。(讓我偷點懶~~)
這裏寫圖片描述
綠亮色的部分就是控件及控件內條目(item)的名稱,你可以通過這個接觸這些控件,如果這些你早已知曉,只是想看看是怎麼實現操縱文件的,那直接看代碼就好了,不需要讀這些浪費時間。
當然,如果你還想知道更多的控件和使用方式,我特意準備了C#控件手冊,通過手冊內容及親自實現,完整項目的的實現指日可待!
C#控件大全.pdf下載鏈接(百度網盤):鏈接:http://pan.baidu.com/s/1miGa8re 密碼:v2yh
編寫過程中幾個值得注意的地方
1,文件的保存另存爲操作方式不同!
如果我用編輯器新建一個文件讓後保存它,此時應該跳出一個保存文件的對話框,但是如果是用編輯器打開一個已經存在的文件,這個時候的保存是不彈出對話框的,但是另存爲仍然需要彈出對話框,對於這個的我的實現方式如下:
這裏寫圖片描述
在保存選項event中,加了個if判斷,如果文件名長度大於0(打開原有文件的情況),則直接保存,否則(新建的情況),執行另存爲選項的操作。
2,richTextBox1.LoadFile(filename, RichTextBoxStreamType.PlainText);裝載文件時的函數的第一個參數是Path(即路徑),所以filename的由來應該是:
filename = openFileDialog1.FileName;
這個函數很容易被代碼提示混淆而用錯,值得注意!
3,定時器的使用格式,因爲是直接用控件生成定時器,所以只需要在class開頭初始化即可:
timer1.Enabled = true;
timer1.Interval = 1000; (以毫秒爲單位)
並且在相應函數中刷新顯示的時間:
this.toolStripStatusLabel1.Text = “系統當前時間:” + DateTime.Now.ToString();

下面給出cs文件中的源碼:

namespace Editor
{
    public partial class Form1 : Form
    {
        string filename = "";           //定義並初始化下文的文件名
        public Form1()
        {
            InitializeComponent();
            //初始化定時器
            timer1.Enabled = true;      //定時器的可見性
            timer1.Interval = 1000;     //定時器的時間間隔設置爲1000ms
            this.toolStripStatusLabel1.Text = "系統當前時間:" + DateTime.Now.ToString();
        }

        private void toolStripMenuItem6_Click(object sender, EventArgs e)
        {
            //點擊此選項,關閉窗口並退出程序
            this.Close();
            Application.Exit();
        }

        private void toolStripMenuItem2_Click(object sender, EventArgs e)
        {
            //新建選項
            richTextBox1.Clear();                       //清空豐富文本區
            filename = "";                              //開始的文件名爲空
            this.Text = "無標題-EditorPrimer";          //初始化文件標題
        }

        private void toolStripMenuItem3_Click(object sender, EventArgs e)
        {
            //打開文件選項,調用openFile對話框
            openFileDialog1.Filter = "文本文件 | *.txt";        //設置文件類型過濾器
            openFileDialog1.FilterIndex = 1;                    //設置文件對話框中當前選中文件篩選器的索引
            openFileDialog1.InitialDirectory = "E:\\";          //設置文件對話框顯示的初始目錄
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                //如果點擊了確定按鈕,更新文件名並向豐富區裝載相應文本
                filename = openFileDialog1.FileName;
                //參數:需要裝載的文件名以及裝載的文本格式,這裏指定純文本
                richTextBox1.LoadFile(filename, RichTextBoxStreamType.PlainText);
                this.Text = filename + "-EditorPrimer";         //更新窗口標題欄
            }
        }

        private void toolStripMenuItem4_Click(object sender, EventArgs e)
        {
            //保存選項實現代碼
            if(filename.Length > 0) {
                //文件名不是空,原來已經有此文件則直接保存
                richTextBox1.SaveFile(filename, RichTextBoxStreamType.PlainText);
            }
            else
            {
                //文件名是空,屬於新建的文件,調用另存爲事件
                toolStripMenuItem5_Click(sender, e);
            }
        }

        private void toolStripMenuItem5_Click(object sender, EventArgs e)
        {
            //另存爲選項,代碼與打開文件選項類似
            saveFileDialog1.Filter = "文本文件 | *.txt";            //設置保存文件類型過濾器
            saveFileDialog1.FilterIndex = 1;                        //文件對話框中當前選定篩選器的索引
            saveFileDialog1.InitialDirectory = "E:\\";              //保存文件時的默認目錄
            if(saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
                //點擊了保存文件對話框的確定按鈕
                filename = saveFileDialog1.FileName;                //更新文件名
                //保存文件,參數分別是文件的路徑path 和文件的類型(這裏指定爲純文本)
                richTextBox1.SaveFile(filename, RichTextBoxStreamType.PlainText);
                //獲取文件保存路徑並更新窗口標題欄
                int index = filename.LastIndexOf('\\');             //找到最後一個斜線的下標索引
                string Text_2 = filename.Substring(index + 1);      //去掉文件路徑獲取文件名(參數下標索引,截取長度(不指定直到最後))
                this.Text = Text_2 + "-EditorPrimer";               //更新標題欄
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            //每隔1000m更新一次時間數據達到動態電子錶的效果
            this.toolStripStatusLabel1.Text = "系統當前時間:" + DateTime.Now.ToString();
        }

    }
}

在程序的菜單欄中有許多其他選項,這些在這裏都沒有實現,但是其實現的流程都是相同的,之後我會通過新的知識繼續補充,也希望大家可以踊躍交流!

源文件及相應的資源下載鏈接:
鏈接:http://pan.baidu.com/s/1dEDqFTZ 密碼:tboi
後序博文擴展記事本功能(下)文章鏈接:http://blog.csdn.net/weixin_37818081/article/details/78587196

想一起學習更多軟件知識嗎?想找一羣志同道合的朋友嗎?想找到自己關於計算機真正的興趣所在嗎?那就加入我們吧!(公衆號剛剛開通不久,每隔3天會發表一篇有質量的文章,希望大家多支持!)
公衆號:奇妙的coco

發佈了50 篇原創文章 · 獲贊 228 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章