如何给自定义控件添加事件

时间:2022-08-31 08:10:44
比如定义一个自定义控件 myControl1 后,现在我想在其他文件引用了这个控件。但是 我想 在鼠标点击这个控件时提示一个Messagebox。 
自己定义 委托 和事件后,怎么调用 ? 不通过比如this.button1.Click += new System.EventHandler(this.button1_Click),在 button1_Click() 这个函数中实现,要鼠标点击 我这个myControl1 所在的区域,自动发生。

或者说 其实我的问题就是如何做一个this.button1.Click 这样一个东西,鼠标点击,它就有反应。

9 个解决方案

#1


控件本身就有click事件吧,你委托出来在你说的button1_Click() 这个函数里写Messagebox的show出来就行了啊,还是你不知道怎么在控件中写委托么

#2


编写事件处理程序,并且绑定给事件是外部调用程序的事情。

你只要定义好事件,并且触发它就可以了。

#3


1.你的控件继承自buttoncontrol;
2.你的控件重写onclick方法;
3.你的控件定了了委托和事件;

4.外部定义好事件处理器;
5.将事件处理器注册到控件的事件;

控件里定义委托是为了将将时间处理器注册到事件;
外部将处理器注册到控件,相当于订阅了控件的点击事件,当点击事件触发的时候会运行你的处理器。
其实,事件本身就是一个观察者模式。

#4


"自己定义 委托 和事件后,怎么调用 ? 不通过比如this.button1.Click += new System.EventHandler(this.button1_Click),在 button1_Click() 这个函数中实现,要鼠标点击 我这个myControl1 所在的区域,自动发生。"
你不注册,当click事件触发的时候怎么去调用你写的this.button1_Click方法?

#5


自定义控件?你是说代码生成的吗?你在创建他的时候可以添加 我拿vb举例 刚好我前面也刚学会

 Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim btn As Button = New Button
        btn.Text = "我是按钮"
        Me.Controls.Add(btn)
        AddHandler btn.Click, AddressOf a
end sub 
    Sub btn_click()
        MsgBox("我是事件")
    End Sub

 
然后如果你要在myControl1_click(xxxxxxxxxxxx)触发时,调用 btn.click属性的话  你可以这样

 Public Sub myControl1_click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles  mycontrol1.click 
btn_click()’在这里调用一遍btn_click
‘myControl1_click里的其他代码
end sub 

我是菜鸟,不知道我理解的对不对,见谅。我也是发发帖子混点分,然后去发帖求助其他问题 哈哈 如何给自定义控件添加事件

#6


AddHandler btn.Click, AddressOf  btn_click

#7


引用 3 楼 smthgdin 的回复:
1.你的控件继承自buttoncontrol;
2.你的控件重写onclick方法;
3.你的控件定了了委托和事件;

4.外部定义好事件处理器;
5.将事件处理器注册到控件的事件;

控件里定义委托是为了将将时间处理器注册到事件;
外部将处理器注册到控件,相当于订阅了控件的点击事件,当点击事件触发的时候会运行你的处理器。
其实,事件本身就是一个观察者模式。
比如 我自定义的控件嘛,我要鼠标双击它 然后它作出反应。 这个要怎么实现, 好像button按钮的click是内置好的嘛,我自己想做一个,但是不知道怎么实现。

#8


引用 7 楼 aa287015 的回复:
Quote: 引用 3 楼 smthgdin 的回复:

1.你的控件继承自buttoncontrol;
2.你的控件重写onclick方法;
3.你的控件定了了委托和事件;

4.外部定义好事件处理器;
5.将事件处理器注册到控件的事件;

控件里定义委托是为了将将时间处理器注册到事件;
外部将处理器注册到控件,相当于订阅了控件的点击事件,当点击事件触发的时候会运行你的处理器。
其实,事件本身就是一个观察者模式。
比如 我自定义的控件嘛,我要鼠标双击它 然后它作出反应。 这个要怎么实现, 好像button按钮的click是内置好的嘛,我自己想做一个,但是不知道怎么实现。


你继承contrlor类,或者buttonbase类里面就有很多事件啊。
1.你写个双击处理函数;
2.注册到双击事件里就行。

#9


重写自己定义控件的OnClick

class MyCtrl:Control{
   override OnClick(e){
       base.OnClick(e);
       MessageBox.Show("this.Name");
   }
}

#1


控件本身就有click事件吧,你委托出来在你说的button1_Click() 这个函数里写Messagebox的show出来就行了啊,还是你不知道怎么在控件中写委托么

#2


编写事件处理程序,并且绑定给事件是外部调用程序的事情。

你只要定义好事件,并且触发它就可以了。

#3


1.你的控件继承自buttoncontrol;
2.你的控件重写onclick方法;
3.你的控件定了了委托和事件;

4.外部定义好事件处理器;
5.将事件处理器注册到控件的事件;

控件里定义委托是为了将将时间处理器注册到事件;
外部将处理器注册到控件,相当于订阅了控件的点击事件,当点击事件触发的时候会运行你的处理器。
其实,事件本身就是一个观察者模式。

#4


"自己定义 委托 和事件后,怎么调用 ? 不通过比如this.button1.Click += new System.EventHandler(this.button1_Click),在 button1_Click() 这个函数中实现,要鼠标点击 我这个myControl1 所在的区域,自动发生。"
你不注册,当click事件触发的时候怎么去调用你写的this.button1_Click方法?

#5


自定义控件?你是说代码生成的吗?你在创建他的时候可以添加 我拿vb举例 刚好我前面也刚学会

 Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim btn As Button = New Button
        btn.Text = "我是按钮"
        Me.Controls.Add(btn)
        AddHandler btn.Click, AddressOf a
end sub 
    Sub btn_click()
        MsgBox("我是事件")
    End Sub

 
然后如果你要在myControl1_click(xxxxxxxxxxxx)触发时,调用 btn.click属性的话  你可以这样

 Public Sub myControl1_click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles  mycontrol1.click 
btn_click()’在这里调用一遍btn_click
‘myControl1_click里的其他代码
end sub 

我是菜鸟,不知道我理解的对不对,见谅。我也是发发帖子混点分,然后去发帖求助其他问题 哈哈 如何给自定义控件添加事件

#6


AddHandler btn.Click, AddressOf  btn_click

#7


引用 3 楼 smthgdin 的回复:
1.你的控件继承自buttoncontrol;
2.你的控件重写onclick方法;
3.你的控件定了了委托和事件;

4.外部定义好事件处理器;
5.将事件处理器注册到控件的事件;

控件里定义委托是为了将将时间处理器注册到事件;
外部将处理器注册到控件,相当于订阅了控件的点击事件,当点击事件触发的时候会运行你的处理器。
其实,事件本身就是一个观察者模式。
比如 我自定义的控件嘛,我要鼠标双击它 然后它作出反应。 这个要怎么实现, 好像button按钮的click是内置好的嘛,我自己想做一个,但是不知道怎么实现。

#8


引用 7 楼 aa287015 的回复:
Quote: 引用 3 楼 smthgdin 的回复:

1.你的控件继承自buttoncontrol;
2.你的控件重写onclick方法;
3.你的控件定了了委托和事件;

4.外部定义好事件处理器;
5.将事件处理器注册到控件的事件;

控件里定义委托是为了将将时间处理器注册到事件;
外部将处理器注册到控件,相当于订阅了控件的点击事件,当点击事件触发的时候会运行你的处理器。
其实,事件本身就是一个观察者模式。
比如 我自定义的控件嘛,我要鼠标双击它 然后它作出反应。 这个要怎么实现, 好像button按钮的click是内置好的嘛,我自己想做一个,但是不知道怎么实现。


你继承contrlor类,或者buttonbase类里面就有很多事件啊。
1.你写个双击处理函数;
2.注册到双击事件里就行。

#9


重写自己定义控件的OnClick

class MyCtrl:Control{
   override OnClick(e){
       base.OnClick(e);
       MessageBox.Show("this.Name");
   }
}