【C#基础】 解决winform窗体调用组合控件类的内部事件-事件的封装

问题描述

在我们实际程序开发过程中,各种需求层出不穷,有的是正常的需求,有的是因为代码构思不合理导致的畸形需求,然而在实际开发中,由于经验问题,这种情况对于我们大多数菜鸟来说不可避免,这不在实际的开发中,遇到了这么一个问题:因为要进行大量的GridView(GridControl控件)的基本功能设计,比如检索,导出到Excel,自动排序,底部栏自动计数,保存布局,设置默认布局,恢复最近布局等等,为了追求代码的可读性和高利用性,设计了一个自定义的组件GridViewToolBar,继承自BindingNavigator。这个组件由多个自定义的子组件(A,B,C,D等,分别是实现不同的功能模块)组成,实现了直接加载工具项的方式加载自定义组件,当组件定义好了封装以后,发现组件定义的View_CustomDrawIndicator(object sender,DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)事件只是针对普通的GridView的没有分组列时的情况,但是对于有分组的情况下,组序号时默认序号是负值,检索框也会出现序号,是-9999999的值,为了满足实际的操作需求,现在需要对这个默认事件在进行修改;

思路

  因为自定义的View_CustomDrawIndicator事件属于子组件,而这些子组件组合成为了对外的组件GridViewToolBar,所以要实现用户可以自定义自动编号的功能,需要子组件对外公布一个代理,或者是事件,在实际运行期间,先检测用户代理是否为null;不为空的话执行代理,为空的话执行默认编码方法;

解决办法

默认方法不进行修改,在子组件和GridViewToolBar组件类中同时定义事件UserCustomDrawIndicator(object sender,DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e),同时定义相同类型的事件,是为了将子组件的事件封装开放给用户,用户在实际使用过程中,可以选择订阅事件来使用自己定义的自动编码方法;在GridViewToolBar组件的事件View_CustomDrawIndicator中,重写add方法为

public event View_CustomDrawIndicator 

{add{this.A.View_CustomDrawIndicator +=value}}

这样既可。

展开阅读全文

没有更多推荐了,返回首页