第三課輸入和顯示——C#計算器編程教學

首先完成輸入功能。
前面講到了那個語句cacl.EnterString(key);
那麼,方法EnterString(string str)是必須有的,而且是public。

最先想到的循環語句是什麼呢?想想界面上的Button的Text,都是不同的,但有隻是輸入的,有功能鍵的,所以要有判斷,判斷的循環有while和switch case,這裏當然是swich case了。代碼如下:

        public void EnterString(string str)
        {
            switch (str)
            {
                case "1":
                case "2":
                case "3":
                case "4":
                case "5":
                case "6":
                case "7":
                case "8":
                case "9":
                case "0":
                    AddCaclString(false, false, str);
                    break;
                case ".":
                    AddCaclString(true, false, str);
                    break;
                case "÷":
                case "/":
                case "×":
                case "*":
                case "-":
                case "+":
                case "%":
                    AddCaclString(false, true, str);
                    break;
                case "MC":
                    MemoryClear();
                    break;
                case "MR":
                    MemoryRecall();
                    break;
                case "MS":
                    MemorySave();
                    break;
                case "M+":
                    MemoryAdd();
                    break;
                case "M-":
                    MemorySubtract();
                    break;
                case "←":
                    Backspace();
                    break;
                case "CE":
                    ClearEnter();
                    break;
                case "C":
                    ClearAll();
                    break;
                case "±":
                    Contrary();
                    break;
                case ")":
                    SetContrary();
                    break;
                case "√":
                    Square();
                    break;
                case "1/x":
                    Reciproc();
                    break;
                case "=":
                    RunCaclEqual();
                    break;
                default:
                    break;
            }
        }

先簡單點,那個AddCaclString方法代碼先作如下設計,用於測試輸入效果。

private void AddCaclString(bool isDecimal, bool isOP, string str)
{
        CaclString += str;
}
下面是兩字段封裝:

public string Result
{
    get { return result; }
    set { result = value; }
}
private string result;
public string CaclString
{
    get { return caclString; }
    set { caclString = value; }
}
private string caclString = "";
運行程序。點擊數字鍵,是否程序沒反應?
這就對了,寫到這裏有反應就怪了。
缺少什麼呢?有經驗的一定會想到變量改變沒有通知界面。
對了,Cacl需要實現通知界面的接口。這個接口名叫INotifyPropertyChanged
具體代碼自己查,查ViewModelBase就可以了。Cacl添加繼承ViewModelBase,修改封裝的字段如下:

public string CaclString
{
    get { return caclString; }
    set
    {
        caclString = value; 
        RaisePropertyChanged("CaclString");//有的叫OnPropertyChanged
     }
}
再運行程序,是否有效果了?
第三課結語。第二第三課其實講了一個編程思想,就是如WPF中的MVVM模式。界面和代碼編程時可分離,用綁定和通知聯繫在一起。這樣就不用老是this.xxx.Text=XX,或者XX=this.xxx.Text了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章