请教高手:
比如自定义复合控件中有一个TextBox和一个DataGridView,现在我的自定义控件中就没有DataGridView的事件了,我要怎么把这些事件也加到复合控件中去呢?高手请指教!
比如自定义复合控件中有一个TextBox和一个DataGridView,现在我的自定义控件中就没有DataGridView的事件了,我要怎么把这些事件也加到复合控件中去呢?高手请指教!
解决方案 »
- VSTO 操作Excel时如何查找特定行/列?
- 如何实现给一个excel文件建立很多不同名称的工作簿(sheet)
- 高人!你在哪里?关于C# 异步处理的效率问题?
- 我在c#下编写用户控件时出的问题。
- 如何在另一个程序中给已经设计好的get、set的变量赋值?
- 关于WebBrowser控件的问题
- 怎么样实现gridview中的删除、更新操作?
- 求一函数,判断一个字串是不是整数
- .net的老大哥们请帮帮小弟,多谢了!
- 我的C盘太小了,v7.0装不上,pqmagic不支持win2000!听说配置好VC6.0,其能运行C#??
- c# Excel文件
- Datatable释放资源问题?(高手进,没深入研究的请帮顶)
public event DataGridViewCellEventHandler CellClick;
复合控件的构造函数()
{
DataGridView.CellClick+=delegate(object sender,DataGridViewCellEventArgs e)
{
OnCellClick(e);
};
}protected virtual void OnCellClick(DataGridViewCellEventArgs e)
{
DataGridViewCellEventHandler dg=CellClick;
if(dg!=null)
{
dg(this,e);
}
}
然后在DataGridView的对应事件中触发复合控件的对应事件。
方法还不算太好,因为事件中与DataGridView的事件参数耦合到一起了,一般来讲这么做可行,但如果将DataGridView控件换成其它的控件(ListView)时,你就惨了,所有订阅事件的地方全都要改,这时为了消除这种情,你需要自己定义事件参数(即不要使用DataGridViewCellEventArgs而是重新定义自己的事件参数,事件参数中的数据从DataGridViewCellEventArgs实例中取得,这样当你包装的DataGridView更改时,只需要更改你本控件内部的OnCellClick()方法即可,你控件外部无须做任何更改;
这样做的工作量太大,有时就偷懒按下面的方法做,
***************************************************************************************
在复合控件中声明相应的事件:
public event DataGridViewCellEventHandler CellClick;
复合控件的构造函数()
{
DataGridView.CellClick+=delegate(object sender,DataGridViewCellEventArgs e)
{
OnCellClick(e);
};
} protected virtual void OnCellClick(DataGridViewCellEventArgs e)
{
DataGridViewCellEventHandler dg=CellClick;
if(dg!=null)
{
dg(this,e);
}
}