天天看點

如何用C#開發的電腦小軟體

如何用C#開發的電腦小軟體

   今天窩在床上一天,利用C#開發了個電腦軟體,屬于winform窗體的應用開發,大體的功能界面如圖所示,簡單的總結一下開發過程。

電腦的大體功能包括:一些基本運算,如加減乘除,開方和乘方,左邊的四個按鍵的功能從上至下分别是:消除緩存,讀取緩存,添加緩存,緩存的累加。

   在我想做這個小軟體之前,自以為看起來貌似蠻簡單,但如果實際自己動手操作,還有不少的細節值得我們思考,還遇到了不少的麻煩,經過反思,嘗試及糾正調試,大概做出了個成型的小電腦。

開發過程:

首先,對軟體可見話的部分做個簡介,建立一個窗體,取名為Calculator。在開發環境中就會彈出一個大體的空白架構,想必絕大多數學VB的同學并不會陌生。彈出屬性對話框,将Form的一個text屬性改成“電腦”(及應用軟體的名稱),電腦三個字的左邊是一個小貓咪的圖檔,那是ico小圖示,在窗體的Icon屬性可以任意設定軟體的圖示,由于這是一個小型應用軟體,沒必要讓它具備放大對話框的屬性,于是可以将它的MaximizeBox屬性設定為False,這樣窗體的放大按鈕就虛化(不可用)了。上面三個詞語是菜單檔案,将工具箱點開,選擇其中的菜單和工具欄選項,選擇其中的StatusStrip,依次編輯三個導航,及“編輯”,“檢視”和“幫助”字母下面的下劃線是在text屬性中多加上一個&即可。下面是一個長條TextBox,作為電腦上面的顯示屏,在下面的左上角是一個Label,用于緩存臨時資料,其他的都是一些Button按鈕。将這些按鈕控件分别取一些特定的名字,以便背景調用和開發。按鈕上面有兩種顔色的文字,藍色和紅色,将Button控件的ForeColor屬性做适當的修改即可更改文字的顔色了。

其次,進入背景代碼段。首先,想好自己的大體的架構,一個算法有兩個變量,我們定義兩個double變量為ValueF和ValueL,起初都設定為null,然後集中算法,如加減乘除,開方乘方等,我們定義一個枚舉類型為 public enum CalcuType,裡面的成員包括 None, Addition(加), Substraction(減), Multiplication(乘), Division(除), Involution(乘方), Square(開方)。

  0到9這十個數字鍵,代碼都很類似,唯一不同的差別就是,上面的數字不一樣,如果一般的程式員或許就會做好一個數字鍵的代碼,然後分别複制一下,将其複制十遍,考慮到代碼的優化,這樣很不好,代碼量看起來又多,如果其中一個代碼打多了話,就要修改十處,很麻煩,這裡我們可以用一個集中事件處理的技巧來辦。

private voidbtnVal_Click(object sender, EventArgs e)

        {

            Button btn=(Button)sender;

            string numberStr = this.txtValue.Text;

            if (this._IsNew)

            {

                numberStr = btn.Text;

                this._ValueL = double.Parse(numberStr);

            }

            else

                if (new string[] { "0","-0", "0.", "-0." }.Contains(numberStr))

                {

                    numberStr = "";

                }

                numberStr += btn.Text;

                this._ValueF = double.Parse(numberStr);

}

這一段代碼是十個數字鍵的共同代碼部分,但是用集中事件處理技巧,要在窗體首次加載的時候觸發它們的Click事件

private voidForm1_Load(object sender, EventArgs e)

            this.txtValue.Text = "0";

            btnVal0.Click += new EventHandler(btnVal_Click);

            btnVal1.Click += new EventHandler(btnVal_Click);

            btnVal2.Click += new EventHandler(btnVal_Click);

            btnVal3.Click += new EventHandler(btnVal_Click);

            btnVal4.Click += new EventHandler(btnVal_Click);

            btnVal5.Click += new EventHandler(btnVal_Click);

            btnVal6.Click += new EventHandler(btnVal_Click);

            btnVal7.Click += new EventHandler(btnVal_Click);

            btnVal8.Click += new EventHandler(btnVal_Click);

            btnVal9.Click += new EventHandler(btnVal_Click);

        }

 以這樣短短的十幾行代碼取代了,上百行的代碼,既增加的效率,又友善程式員的查錯。

接下來,對各個不同的功能進行解述,各個邏輯符号的功能代碼:

  等于号功能:private voidbtnResult_Click(object sender, EventArgs e)

            switch (CalculateType)

                case CalcuType.Addition:

                    this.txtValue.Text =(_ValueF + _ValueL).ToString();                  

                    break;

                case CalcuType.Substraction:

                    this.txtValue.Text =(_ValueF - _ValueL).ToString();                   

                case CalcuType.Multiplication:

                    this.txtValue.Text =(_ValueF * _ValueL).ToString();                

                case CalcuType.Division:

                    if (_ValueL != 0)

                    {

                        this.txtValue.Text =(_ValueF / _ValueL).ToString();

                    }

                    else

                        this.txtValue.Text = "文法錯誤,除數不能為0!";

                case CalcuType.Involution:  //乘方

                    this.txtValue.Text = Math.Pow((double)_ValueF,(double)_ValueL).ToString();

                    break;

                case CalcuType.Square:      //開方

                    this.txtValue.Text = Math.Pow((double)_ValueF,1 / (double)_ValueL).ToString();

            this._ValueF = double.Parse(this.txtValue.Text);

  加法功能:privatevoid btnAddition_Click(object sender, EventArgs e)

            this.btnResult_Click(sender, e);

            this.CalculateType = CalcuType.Addition;

            _IsNew = true;

減法功能:private voidbtnSubstraction_Click(object sender, EventArgs e)

            this.CalculateType = CalcuType.Substraction;

乘法功能:private voidbtnMultiplication_Click(object sender, EventArgs e)

            this.CalculateType = CalcuType.Multiplication;

除法功能:private voidbtnDivision_Click(object sender, EventArgs e)

            this.CalculateType = CalcuType.Division;

開方功能:private voidbtnSquare_Click(object sender, EventArgs e)

            this.CalculateType = CalcuType.Square;

乘方功能:private voidbtnInvolution_Click(object sender, EventArgs e)

            this.CalculateType = CalcuType.Involution;

倒退功能:private voidbtnBackspace_Click(object sender, EventArgs e)

            if (txtValue.Text.Length>0)

                this.txtValue.Text = txtValue.Text.Substring(0,txtValue.Text.Length - 1);

歸零功能:private voidbtnClears_Click(object sender, EventArgs e)

            this._ValueF = null;

            this._ValueL = null;

            this.CalculateType = CalcuType.None;

以上是一些簡單的邏輯功能,還有别的緩存功能就不再詳寫了。雖然一天敲代碼比較單調,但看出自己做出個東西出來還是蠻開心的。

這個電腦做的還不完善,還會有一些Bug,有待繼續完善!

本文轉自蓬萊仙羽51CTO部落格,原文連結:http://blog.51cto.com/dingxiaowei/1366819,如需轉載請自行聯系原作者