首先完成輸入功能。
前面講到了那個語句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了。
第三課輸入和顯示——C#計算器編程教學
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.