中易网

C#为自定义控件添加事件!!(急!)

答案:3  悬赏:10  
解决时间 2021-04-28 08:45
  • 提问者网友:先森请一心
  • 2021-04-27 22:49
具体来说 我编写了 一个 usercontrol 在里面 添加了一些 label ,但是 希望 给这些 label 添加 click(单击) 事件。。不知道 如何写。。麻烦 高手 给予指点 ,谢谢!

1楼的 这位 大哥,看清楚了 ,是 usercontrol, 如果 能 用 this.label.Click 点出来的话,我也就不问了。。。
2楼的 大哥,我试了 你的方法,但是 提示没有this.label1_Click,而且label1.Click += new System.EventHandler(this.label1_Click); 这句的label点不出来 click事件,还有我的label已经 重新起了名字,怎么办?
最佳答案
  • 二级知识专家网友:闲懒诗人
  • 2021-04-27 22:58
class usercontrol1:UserControl
{

// 避免和UserControl的Click重名,不过你可以重写UserControl的Click事件
public event EventHandler Click2;

// Label1的声明
protected Label Label1;

// 构造函数
public usercontrol1()
{
label1 = new Label();
label1.Click += new System.EventHandler(this.label1_Click);
}
....
....
private void label1_Click(object sender, EventArgs e)
{
if (Click2 != null)
{
Click2(this, new EventArgs());
}
}

}

// 补充

按照你的label的名字改一改,
全部回答
  • 1楼网友:不服输就别哭
  • 2021-04-28 00:49
厂家提供的控件都是封装好的,就算你扩展这个类也只能添加功能,不能直接响应双击事件。 但是你可以拦截这个控件的双击消息。 以下代码可加在控件的父窗口(假设为form1),并在form1初始化后安装拦截挂钩。同样的方法也可屏蔽那控件的其它消息,如屏蔽它的右键事件。 private const int gwl_wndproc = -4; private const int wm_lbuttondown=0x0201; private const int wm_lbuttonup=0x0202; private const int wm_lbuttondblclk=0x0203;//双击消息 [dllimport("user32.dll", charset = charset.auto)] private static extern intptr setwindowlong(intptr hwnd, int nindex, mywndproc wndproc); [dllimport("user32.dll", charset = charset.auto)] private static extern intptr callwindowproc(intptr wndproc, intptr hwnd, int msg, intptr wparam, intptr lparam); public delegate intptr mywndproc(intptr hwnd, int msg, intptr wparam, intptr lparam); private intptr oldwndproc = intptr.zero; private mywndproc wpr = null; private intptr mycontrolwndproc(intptr hwnd, int msg, intptr wparam, intptr lparam) { switch (msg) { case wm_lbuttondblclk://拦截双击消息 ....................... ....................... return (intptr)0; default: return callwindowproc(oldwndproc, hwnd, msg, wparam, lparam); } } //假设那个控件变量名为 _thatcontrol private void initializethatcontrol() { //初始化的时候安装消息拦截 this.wpr = new mywndproc(this.mycontrolwndproc); this.oldwndproc = setwindowlong(_thatcontrol.handle, gwl_wndproc, wpr); } public form1() { initializecomponent(); initializethatcontrol();//加这句,在form初始化后安装消息拦截 }
  • 2楼网友:24K纯糖
  • 2021-04-28 00:09
public partial class LabelResult : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { try { } catch { } } } 把要的事件写进去就行
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息