关于TextBox内容自动变换的设计:
首先定义接口
public interface IConverter {
string Convert(string value);
}
然后定义具体的转换类,比如金额类型值自动加逗号转换类
public class CurrentMoneyConverter : IConverter {
public string Convert(string value) { ...} //实现具体的转换逻辑
}
定义保存需要转换的对象控件的容器类
public class ActiveConverter {
// 保存追加的控件及其对应的转换模式
private Dictionary<Control, Queue<IConverter>> dic = new Dictionary<Control, Queue<IConverter>>();// 追加需要转换的控件及转换模式的方法
public void AddConverter(Control control, IConverter converter) { if (dic.ContainsKey(control)) { if (dic[control].Contains(converter) == false) { dic[control].Enqueue(converter); } } else { Queue<IConverter> queue = new Queue<IConverter>(); queue.Enqueue(converter); dic.Add(control, queue); control.Leave += new EventHandler(this.DoConversion); } }// 转换事件
private void DoConversion(object sender, EventArgs e) { Control control; if (sender is Control) { control = (Control)sender; } else { return; } Queue<IConverter> queue; if (dic.ContainsKey(control)) { queue = dic[control]; } else { return; } foreach (IConverter converter in queue) { try { control.Text = converter.Convert(control.Text); } catch { // TODO } } }public ActiveConverter() {
return; }}最后,在画面类里定义ActiveConverter 的实例,在画面出始化的时候,实例化,并追加需要转换的控件
this.activeConverter.AddConverter(this.tbxA, new CurrentMoneyConverter());
this.activeConverter.AddConverter(this.tbxB, new AlphanumericOnlyConverter());
此设计思想重点在于简化画面类设计,使其只专注于数据表示.