求助,如何给自定义的控件添加事件?[c# winform]

pgdoryoku 2009-01-18 10:02:03
我自定义了一个控件,想添加个该控件的click事件..
查了下资料要用到委托代理来实现,想了好久,只做到这步,
求高手指点下下面该如何做,谢谢了。


//1.声明关于事件的委托;
public delegate void ClickEventHandler(object sender, EventArgs e);

//2.声明事件;
public event ClickEventHandler Click;
protected virtual void lclickgrid(ClickEventHandler e)
{//事件触发方法
if (Click != null)
{//判断事件是否为空
this.Click(this, new EventArgs());//触发事件
}
}

...............//求高手帮忙指点下,谢谢了。
...全文
366 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yagebu1983 2009-01-18
  • 打赏
  • 举报
回复
楼主写的代码就是正确的!!
up!!
pgdoryoku 2009-01-18
  • 打赏
  • 举报
回复
非常感谢大家的乐情帮助。。
特别是cuike519 兄弟的讲解,很通俗易懂。~
hand~
cuike519 2009-01-18
  • 打赏
  • 举报
回复
重写click事件要用new把组件内部的click给屏蔽了。

或者我在交给你click之前我还想干点别的也可以重写这个触发事件的方法。
cuike519 2009-01-18
  • 打赏
  • 举报
回复
事件是这样理解应该比较容易

//1.声明关于事件的委托;其实这个也能理解为接口,就是触发事件的时候要执行函数的签名
public delegate void ClickEventHandler(object sender, EventArgs e);

//2.声明事件;我要干一件事情,这件事情是单击,如果你会单击,那么你应该注册这个事件(你要告诉我你会干)
public event ClickEventHandler Click;

// 这个函数实际上是触发事件的函数,这个函数在你的组件内部被调用,然后触发外部处理函数
// 这个时间这个地点要干这件事情了,我要告诉你
protected virtual void lclickgrid(ClickEventHandler e)
{//事件触发方法,如果你也知道该怎么干这件事情,你应该已经注册(通知我),那么我就把这件事情交给你
if (Click != null)
{//判断事件是否为空,我把事情交给你干,你可以开始工作了
this.Click(this, new EventArgs());//触发事件
}
}


通俗的说就是我想干一件事情,我只知道要在哪,在什么时间干这么件事情,但是我不知道怎么干,但是可能你知道怎么干,那么好,我在这个地点和这个时间把这件事情交给你来干,你干完了通知我(这就是回调)。

DWilliam 2009-01-18
  • 打赏
  • 举报
回复
Public Event ReturnButtonClick(ByVal sender As Object, ByVal e As EventArgs)
Protected Sub btnReturn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnReturn.Click
RaiseEvent ReturnButtonClick(sender, e)
End Sub
DWilliam 2009-01-18
  • 打赏
  • 举报
回复
Public Event ReturnButtonClick(ByVal sender As Object, ByVal e As EventArgs)
Protected Sub btnReturn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnReturn.Click
RaiseEvent ReturnButtonClick(sender, e)
End Sub
wangping_li 2009-01-18
  • 打赏
  • 举报
回复
上面就是重写OnClick,使单击textbox时实现选中全部内容
可以根据你的实际情况改成自己想要的
wangping_li 2009-01-18
  • 打赏
  • 举报
回复
可能是我理解有点错,不好意思,不知道是否下面这样重写?


public class SingleClickTextBox: TextBox
{
protected override void OnClick(EventArgs e)
{
this.SelectAll();
base.OnClick(e);
}


}
wangping_li 2009-01-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pgdoryoku 的回复:]
呵呵,谢谢barry_bai 兄弟了和大家了~~
那最后在请教下各位大大一个问题,
如果我想添加的控件中已经存在了click事件,而我想重写该控件的click该如何实现呢?

有点超题了,不好意思,不过这个问题我实在很想也了解下,麻烦各位了。
[/Quote]
重写该事件是什么意思呢?Click只是单击事件,你完全可以在控件.Click+=...函数里面执行你要的内容.界面上直接使用就行了
pgdoryoku 2009-01-18
  • 打赏
  • 举报
回复
自己顶下。
pgdoryoku 2009-01-18
  • 打赏
  • 举报
回复
呵呵,谢谢barry_bai 兄弟了和大家了~~
那最后在请教下各位大大一个问题,
如果我想添加的控件中已经存在了click事件,而我想重写该控件的click该如何实现呢?

有点超题了,不好意思,不过这个问题我实在很想也了解下,麻烦各位了。

GTX280 2009-01-18
  • 打赏
  • 举报
回复
你这个委托已经写好了,具体的事件处理由调用控件的代码实现,你的控件就不用管了
barry_bai 2009-01-18
  • 打赏
  • 举报
回复
代码已经实现了,在使用这个控件的代码中调用你的事件就好了。

control为这个控件名:

control.Click += new ClickEventHandler(control_Click);


private control_Click(object sender, EventArgs e)
{
//clicked.
}

另外:
public event ClickEventHandler Click;

更好的命名是
public event ClickEventHandler OnClick;

110,500

社区成员

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

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

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