具体来说 我编写了 一个 usercontrol 在里面 添加了一些 label ,但是 希望 给这些 label 添加 click(单击) 事件。。不知道 如何写。。麻烦 高手 给予指点 ,谢谢!
1楼的 这位 大哥,看清楚了 ,是 usercontrol, 如果 能 用 this.label.Click 点出来的话,我也就不问了。。。
2楼的 大哥,我试了 你的方法,但是 提示没有this.label1_Click,而且label1.Click += new System.EventHandler(this.label1_Click); 这句的label点不出来 click事件,还有我的label已经 重新起了名字,怎么办?
C#为自定义控件添加事件!!(急!)
答案:3 悬赏:10
解决时间 2021-04-28 08:45
- 提问者网友:先森请一心
- 2021-04-27 22:49
最佳答案
- 二级知识专家网友:闲懒诗人
- 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的名字改一改,
{
// 避免和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
{
}
}
}
把要的事件写进去就行
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息