c# 控件的单击事件问题

shiyi008 2012-03-26 09:17:04
有两个单击事件:lb_click1,lb_click2
我要设置label的单击事件为lb_click2
但是label之前的单击事件可能没有,也可能为lb_click1
这个需要判断一下label之前的单击事件,该怎么判断?
请高手指点!
...全文
454 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiyi008 2012-07-22
  • 打赏
  • 举报
回复
时隔已久,没想到又遭到批评!!
我滴错!我滴错!我滴错!
Anod 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
早上试了,但出错了
找不到类型或命名空间名称form1
[/Quote]
。。。。就不会创建一个窗体 然后修改类名吗。。。。无语了 我也是新手 。。 曹版主是没错的
shiyi008 2012-04-05
  • 打赏
  • 举报
回复
偶滴问题解决了!
在csdn搜到“C#中删除任意控件任意事件的事件列表的实现! ”
调用人家写的函数ClearEvent(label, "Click");
函数如下所示:
void ClearEvent(Control control, string eventname)
{
if (control == null) return;
if (string.IsNullOrEmpty(eventname)) return;

BindingFlags mPropertyFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic;
BindingFlags mFieldFlags = BindingFlags.Static | BindingFlags.NonPublic;
Type controlType = typeof(System.Windows.Forms.Control);
PropertyInfo propertyInfo = controlType.GetProperty("Events", mPropertyFlags);
EventHandlerList eventHandlerList = (EventHandlerList)propertyInfo.GetValue(control, null);
FieldInfo fieldInfo = (typeof(Control)).GetField("Event" + eventname, mFieldFlags);
Delegate d = eventHandlerList[fieldInfo.GetValue(control)];

if (d == null) return;
EventInfo eventInfo=controlType.GetEvent(eventname);

foreach (Delegate dx in d.GetInvocationList())
eventInfo.RemoveEventHandler(control, dx);

}
shiyi008 2012-03-27
  • 打赏
  • 举报
回复
2楼的不行,下边提示click只能出现在“+=”或“-=”左右
GOOWJ 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 shiyi008 的回复:]

好吧,谢谢你的代码!
我没有资格请教你这样的大神,也不敢再请教了!
[/Quote]
。。。。。
threenewbee 2012-03-27
  • 打赏
  • 举报
回复
如果我在你隔壁,我发誓新建一个程序,创建两个按钮,复制上面的代码,运行,OK。

整个过程只要1分钟。

你非要说不行,你让我说什么呢。
shiyi008 2012-03-27
  • 打赏
  • 举报
回复
好吧,谢谢你的代码!
我没有资格请教你这样的大神,也不敢再请教了!
threenewbee 2012-03-27
  • 打赏
  • 举报
回复
不是不愿意,是真不敢指点了。
shiyi008 2012-03-27
  • 打赏
  • 举报
回复
自认为复制粘贴没问题,你要是愿意帮忙指点就指点,但是没必要打击新手!
threenewbee 2012-03-27
  • 打赏
  • 举报
回复
那你先学习下“复制粘贴”吧。
shiyi008 2012-03-27
  • 打赏
  • 举报
回复
早上试了,但出错了
找不到类型或命名空间名称form1
threenewbee 2012-03-27
  • 打赏
  • 举报
回复
新建一个窗口,放两个按钮,然后把代码粘贴进去,这有什么不会的我就奇怪了。
shiyi008 2012-03-27
  • 打赏
  • 举报
回复
看了,还没看明白呢
threenewbee 2012-03-27
  • 打赏
  • 举报
回复
我给你的代码没有看?
wxmayifei 2012-03-26
  • 打赏
  • 举报
回复
if(label.Click!=null)
{
.........
}
threenewbee 2012-03-26
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Reflection;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("button1");
}

private void button2_Click(object sender, EventArgs e)
{
Delegate[] _List = GetObjectEventList(button1, "EventClick", typeof(Control));
foreach (var item in _List)
{
MessageBox.Show(item.Method.ToString());
}
}

public static Delegate[] GetObjectEventList(object p_Object, string p_EventName, Type p_EventType)
{
PropertyInfo _PropertyInfo = p_Object.GetType().GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);
if (_PropertyInfo != null)
{
object _EventList = _PropertyInfo.GetValue(p_Object, null);
if (_EventList != null && _EventList is EventHandlerList)
{
EventHandlerList _List = (EventHandlerList)_EventList;
FieldInfo _FieldInfo = p_EventType.GetField(p_EventName, BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.IgnoreCase);
if (_FieldInfo == null) return null;
Delegate _ObjectDelegate = _List[_FieldInfo.GetValue(p_Object)];
if (_ObjectDelegate == null) return null;
return _ObjectDelegate.GetInvocationList();
}
}
return null;
}

}
}

111,089

社区成员

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

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

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