控件的行为模式
来源:互联网 发布:少女前线铁血数据 编辑:程序博客网 时间:2024/05/11 17:06
客户端软件开发的时候,控件会有各种的事件可以进行绑定,例如:TextBox 的 TextChanged 事件,Button 的 Clicked 事件,ComboBox 的 SelectedIndexChanged 事件等等。在一个软件里,会存在具有相同逻辑结构抽象逻辑集合,例如:TextBox里只允许输入整数,所有的按钮在鼠标进入、鼠标点击、鼠标释放、取得焦点时会有不同的动态效果。这些都可以用事件绑定的方式来实现,但是如果一个个的去绑定事件,然后实现相应逻辑的话,会产生非常多的重复和冗余的代码,给维护带来非常高昂的代价,也不符合面向对象的思想。因此,我们可以对具有相同逻辑结构抽象逻辑集合进行重新定义,定义为一种逻辑的原子单位——行为。
下面用简单的示例代码来解释行为的定义:
一、定义行为抽象类:
/// <summary> /// 行为的基类 /// </summary> /// <typeparam name="T"></typeparam> public abstract class BehaviorBase<T> { #region Fields /// <summary> /// The attach element. /// </summary> private T m_AttachElement; #endregion #region Properties /// <summary> /// Gets or sets the attach element. /// </summary> public T AttachElement { get { return this.m_AttachElement; } set { this.m_AttachElement = value; } } #endregion #region Interface /// <summary> /// 附加行为到指定对象 /// </summary> /// <param name="element"></param> public void Attach(T element) { this.m_AttachElement = element; this.AttachBehavior(); } /// <summary> /// 卸载行为 /// </summary> public void Deattach() { this.DeattachBehavior(); } #endregion #region Virtual /// <summary> /// Attaches the behavior to the element. /// </summary> protected abstract void AttachBehavior(); /// <summary> /// Deataches the element's behavior. /// </summary> protected abstract void DeattachBehavior(); #endregion }
二、子类继承后,实现抽象方法 AttachBehavior 和 DeattachBehavior 即可
/// <summary> /// 使TextBox拥有只能输入数字的行为 /// </summary> public class TextBoxIntOnlyBehavior : BehaviorBase<TextBox> { #region Public Properties /// <summary> /// 记录数字输入的最近一次正确值,默认值为0 /// </summary> public int ControlsIntOnlyRecord { get; set; } #endregion #region Override protected override void AttachBehavior() { this.AttachElement.KeyPress += new KeyPressEventHandler(this.ControlsIntOnly_KeyPress); this.AttachElement.TextChanged += new EventHandler(this.ControlsIntOnly_TextChanged); this.AttachElement.Leave += new EventHandler(this.ControlsIntOnly_Leave); } protected override void DeattachBehavior() { this.AttachElement.KeyPress -= new KeyPressEventHandler(this.ControlsIntOnly_KeyPress); this.AttachElement.TextChanged -= new EventHandler(this.ControlsIntOnly_TextChanged); this.AttachElement.Leave -= new EventHandler(this.ControlsIntOnly_Leave); } #endregion #region Events public void ControlsIntOnly_KeyPress(object sender, KeyPressEventArgs e) { if (!(Char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar))) { e.Handled = true; } if (e.KeyChar == (char)Keys.Enter) { e.Handled = true; ControlsIntOnly_Leave(sender, null); } } public void ControlsIntOnly_TextChanged(object sender, EventArgs e) { try { int TempInt = int.Parse(((TextBox)sender).Text); ControlsIntOnlyRecord = TempInt; } catch { } } public void ControlsIntOnly_Leave(object sender, EventArgs e) { TextBox TheIntTextbox = (TextBox)sender; try { int.Parse(TheIntTextbox.Text); } catch { TheIntTextbox.Text = ControlsIntOnlyRecord.ToString(); } } #endregion }
后期可以使用工厂方式,实现独立的创建和管理模式。
- 控件的行为模式
- (转) 控件的设置模式行为ControlDesigner
- 产品经理的行为模式
- 行为型模式-观察者模式的使用
- 行为型的设计模式-策略模式
- 控制 WebBrowser 控件的外观和行为
- 控制 WebBrowser 控件的外观和行为
- 行为模式
- 行为模式
- 行为模式
- 设计模式的分类,创建模式,结构模式,行为模式
- 好的团队共同的行为模式
- 七。Observer - 对象的行为模式
- 《Head First设计模式》鸭子的行为
- 职业化所包含的行为模式
- 状态模式实现依赖于状态的行为
- 《影响力》 -- 人类的心理行为模式
- Erlang行为模式实现模块的首部
- 国内网管职业教育存在的问题(一)
- 循环遍历控件
- 时间复杂度O(n)什么意思
- Java应用中的编码问题
- 宽基线条件下的特征匹配
- 控件的行为模式
- 关于可视化
- java poi excel
- 解决https://localhost:1158/em 页面无法打开的问题
- ★★★☆ Visual Studio 2008 每日小窍门 【持续发布ing~】 Tips:046
- 显示用户当前工作路径
- 关于android如何用AutoCompleteTextView模仿联系人搜索的办法
- s3c 6410 DMA驱动分析
- VC6.0代码升级到VS2010 (1)