• 尝试获取TextBox_TextChanged事件订阅列表过程


    项目中有用到动态事件绑定【多种事件】,由于可触发多次绑定,所以想获取订阅列表来判断是否已绑定事件,从而避免问题!

    查找相关资料得知Delegate的GetInvocationList方法可以获取委托的订阅列表。于是问题集中在怎么通过event转换成delegate.

    通过以下方法可以获取Button Click事件的订阅列表:

    PropertyInfo p = (typeof(Button)).GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);
    EventHandlerList fplist = p.GetValue(this.button1, null) as EventHandlerList;
    FieldInfo f = (typeof(Control)).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic);
    object key = f.GetValue(this.button1);
    Delegate d = fplist[key];
    Delegate[] fps = d.GetInvocationList();

    注:Winform中的控件不能直接通过实例的事件名称进行转换来获取。

    此方法在Button中进行正常,但在TextChanged事件却一直获取不到,查找相关资料得到的结论是impossible, 如有实现者请不吝赐教,感谢不尽!
    但是在自定义类中,可以运行的非常happy, 如果一定要这样获取订阅列表,可实现自定义TextBox控件,从而达到目的

    综合项目实际情况,最后决定采用标志位的方法解决问题,为记录查找解决方案过程中发现的知识,特记录!

  • 相关阅读:
    BZOJ 2326 数学作业
    BZOJ 4448 情报传递
    BZOJ 4443 小凸玩矩阵
    BZOJ 1852 最长不下降序列
    BZOJ 4373 算术天才⑨与等差数列
    68285
    65656556
    D. Points in rectangle
    恐怖的怪物
    再战斐波那契
  • 原文地址:https://www.cnblogs.com/ywkpl/p/3247723.html
Copyright © 2020-2023  润新知