首先完成输入功能。
前面讲到了那个语句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#计算器编程教学
最新推荐文章于 2024-04-28 17:05:37 发布