比如说
DataGrid1.Click事件绑定了几个委托的实现。我想在程序运行时,得到该事件具体绑定了哪些委托函数。谢谢
253啦各位

解决方案 »

  1.   

    这不好办。
    除非你给事件加上add 和 remove 访问器。
      

  2.   

    举个简单的例子吧,
    比如说datagrid,当我选中一行时,我可以点击delete键删除,但是我想在删除之前先给个体是,如果用户选yes,就删除,否则就不删。
    我在datagrid的onKeyDown事件里写代码,弹出MessageBox,但是在弹出MessageBox之前,datagrid的那一行就被删除了。请问我想实现上述功能,该怎么做。前面问得问题就是想看看这个datagrid的OnKeyDown事件到底绑定了几个方法,都是些什么方法,然后看看能不能改写这些方法。达到我的目的
      

  3.   

    无法从委托拿函数的吧,因为委托也记下了函数的指针。你这个需求可以自己包装一下DataGrid,捕捉它的消息,如果是删除的消息就产生一个新的事件。
      

  4.   

    你想要的事件不是在datagrid中拦截,事件已经被发送到被绑定的对象中。
    我不知道用什么事件处理你的问题,但是我做过数据回滚,接近你要的。
    对象被绑定到DataGrid时,DataGrid自动把事件连接到被绑定的对象。
      

  5.   

    Delegate class has a GetInvocationList() method, but for an event, it is only valid inside the class where the event is declared, so you probably have to use Reflection>>>>但是我想在删除之前先给个体是,如果用户选yes,就删除,否则就不删see FAQ5.58 How can I put up a confirmation question when the user tries to delete a row in the datagrid by clicking on the row header and pressing the Delete key?
    http://www.syncfusion.com/FAQ/WindowsForms/FAQ_c44c.aspx#q889q
      

  6.   

    >>>>我服了楼上的扫描功能,见了他的好多回复都是连接这就是差距亚
      

  7.   

    试一下类似下面的编码using System.Reflection;
    ....
    CheckEventHandlers("EventKeyDown",dataGrid1);
    static void CheckEventHandlers(string EventObjectName, Control c)
    {
    //get the key into the EventHandlerList
    Object key=null;
    FieldInfo fikey = typeof(Control).GetField(EventObjectName,BindingFlags.Static|BindingFlags.NonPublic);
    if (fikey != null)
    key = fikey.GetValue(null); FieldInfo fi = typeof(System.ComponentModel.Component).GetField("events",BindingFlags.Instance|BindingFlags.NonPublic);

    if (fi != null)
    {
    Object eventlist = fi.GetValue(c);
    FieldInfo fi2 = eventlist.GetType().GetField("head",BindingFlags.Instance|BindingFlags.NonPublic);
    if (fi2 != null)
    {
    Object head = fi2.GetValue(eventlist);

    while (true)
    {
    object ekey = GetObjectField(head,"key");

    object handler = GetObjectField(head,"handler");
    if (ekey == key)
    {

    //we found
    Delegate g = (Delegate)handler;
    foreach (Delegate dg in g.GetInvocationList())
    Console.WriteLine("{0}={1}", dg.Target.GetType().Name, dg.Method.Name);
    break;
    } object next = GetObjectField(head,"next");
    if (next == null)
    break; head = next;
    } }
    }
    }static object GetObjectField(object o, string name)
    {
    FieldInfo fi = o.GetType().GetField(name,BindingFlags.Instance|BindingFlags.NonPublic|BindingFlags.Public); if (fi != null)
    return fi.GetValue(o); return null;
    }