因为业务特殊需要,根据事件类型名称,进行反射,动态的绑定事件,现已经实现。/// <summary>
/// 自定义事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CustomHandler(Object sender, EventArgs e)
{
因为一个控件有个可能绑定了多个事件,在事件内部,需要根据不同的事件类型进行区分。
如 是Click事件我处理A逻辑,是KeyUp事件我处理B逻辑
}我的问题是如何获取当前触发的事件类型,EventArgs中没找到相关信息。求助各位大神 求助 事件 反射
/// 自定义事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CustomHandler(Object sender, EventArgs e)
{
因为一个控件有个可能绑定了多个事件,在事件内部,需要根据不同的事件类型进行区分。
如 是Click事件我处理A逻辑,是KeyUp事件我处理B逻辑
}我的问题是如何获取当前触发的事件类型,EventArgs中没找到相关信息。求助各位大神 求助 事件 反射
判断是Click 然后就定义一个Click事件 里面处理Click的处理逻辑这样你认为才对?老大 反射的特效是干嘛 就是动态加载啊 在运行时才知道 我要生成什么事件 进行什么样的处理而不是一开始就全部代码写死了
KeyUp += onkeyup;
与
Click += onevent;
KeyUp += onevent;void onevent()
{
if(Click)
{
//onchick
}
else if(KeyUp)
{
//onkeyup
}
}如果你非觉得下面这种方式比上面那种方式显得优越,那我只能说你太嫩了。
其实在逻辑上,上下两种方式是一样的,一般来说,采用上面的方式代码好维护一点,而且符合正常的思维逻辑。不过这都不重要,你的问题在于把反射神话了,反射顶多是动态加载而已。而你的逻辑代码始终是静态了,也就是说,如果哪天我加了一个事件myevent,那么你就还要多一个if(myevent);//domyevent,真没看出来优越性在哪。说难听点,你现在搞的东西是无数人玩剩下来的东西,刚入门,或者即将入门的人总觉得可以做一种万能处理方法出来解决一切问题,这就跟500年前无数科学家都喜欢研究永动机一样,现在看来,在不推翻能量守恒定律的前提下研究永动机就是脑残。
2.网上的例子 参数都是值类型,如何传对象,正在研究中。跪求大神指点以下方法可以调用
MethodInfo simpleShow = typeof(InputFrom).GetMethod("Demo", showParameters);以下方法调用异常
MethodInfo simpleShow1 = typeof(InputFrom).GetMethod("Demo1", BindingFlags.NonPublic | BindingFlags.Instance);MethodInfo simpleShow2 = typeof(GradInputFrom).GetMethod("Demo2", BindingFlags.NonPublic | BindingFlags.Instance, ?, showParameters, ?);菜鸟程序员一个 GetMethod方法用得很少 2个?号的地方不知道应该传入什么参数
4#就已经告诉你解决方向了,比如你可以建立一个类
public class CustomEvent
{
public event EventHandler OnEvent;
public void CustomHandler(Object sender, EventArgs e)
{
OnEvent(sender, e);
}
}
每个不同的事件类型绑定到一个新的CustomEvent实例上
{
public string EventName { get; set; }
} public delegate void CheckedEventHandler(object sender, CustomEventArgs e); public delegate void IndeterminateEventHandler(object sender, CustomEventArgs e); public delegate void UncheckedEventHandler(object sender, CustomEventArgs e); /// <summary>
/// Grad - 可选框控件
/// </summary>
public class GradCheckBox : CheckBox, IGradFromControl
{
public event CheckedEventHandler Checked; public event IndeterminateEventHandler Indeterminate; public event UncheckedEventHandler Unchecked;
bool oldValue = false; /// <summary>
/// 构造函数
/// </summary>
public GradCheckBox()
: base()
{
/*默认样式*/ base.Checked += new RoutedEventHandler(GradCheckBox_Checked);
base.Unchecked += new RoutedEventHandler(GradCheckBox_Unchecked);
} void GradCheckBox_Unchecked(object sender, RoutedEventArgs e)
{
if (this.Unchecked != null)
{
Unchecked(sender, new CustomEventArgs() { EventName = "Unchecked" });
}
} void GradCheckBox_Checked(object sender, RoutedEventArgs e)
{
if (this.Checked != null)
{
Unchecked(sender, new CustomEventArgs() { EventName = "Checked" });
}
}