自定义的复合控件,如何把复合控件中的某个控件的事件 定义成复合控件可以使用的事件?

wesleyluo 2009-03-25 05:10:59
请教高手:
比如自定义复合控件中有一个TextBox和一个DataGridView,现在我的自定义控件中就没有DataGridView的事件了,我要怎么把这些事件也加到复合控件中去呢?

高手请指教!
...全文
86 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wesleyluo 2009-03-27
  • 打赏
  • 举报
回复
哈哈,我再研究下。
wesleyluo 2009-03-26
  • 打赏
  • 举报
回复
shaohua的方法太好了,我搞定了,讓我又學到了不少。哈哈
ztenv 2009-03-26
  • 打赏
  • 举报
回复

方法还不算太好,因为事件中与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);
}
}
jy251 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lianshaohua 的回复:]
在复合控件中声明相应的事件:
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);
}
}

[/Quote]

正解!
gisyellow 2009-03-25
  • 打赏
  • 举报
回复
在复合控件中声明DataGridView对应的事件,注意委托签名要保持一致。
然后在DataGridView的对应事件中触发复合控件的对应事件。
wesleyluo 2009-03-25
  • 打赏
  • 举报
回复
好的,我明天用lianshaohua 和 agentianle的方法都试下。
homejiji 2009-03-25
  • 打赏
  • 举报
回复
mark
天乐 2009-03-25
  • 打赏
  • 举报
回复
2楼的不错,就是代理模式的思想

另外说一句,你要是嫌麻烦,想偷懒,直接弄个DataGridView属性让外部可以访问就得了

毕竟DataGridView那么多的事件,一个个的写起来很累啊

要不你再用反射写个代码生成器,直接生成一下吧
SealedLove 2009-03-25
  • 打赏
  • 举报
回复
UP 楼上思路不错
ztenv 2009-03-25
  • 打赏
  • 举报
回复
希望对你的想法有帮助。。。。。。
ztenv 2009-03-25
  • 打赏
  • 举报
回复
在复合控件中声明相应的事件:
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);
}
}
麻子Mozart 2009-03-25
  • 打赏
  • 举报
回复
帮顶

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧