在C#中引发外部对象的事件

ano*_*ard 7 .net c# events raise

如果actions是Panel,我可以举起Click它的父母的事件吗?我目前有这个代码,但Click事件不是方法,所以这段代码无效.
有谁知道我怎么能做到这一点?

actions.Click += delegate(object Sender, EventArgs e)
{
    ((Panel)Sender).Parent.Click();
}
Run Code Online (Sandbox Code Playgroud)

Meh*_*ari 9

不可能event直接从另一个C#中提取C#class(即使它是public).您可以提供一种方法(具有足够的访问修饰符),event代表您提出并在另一方中调用该方法class.

顺便说一句,这可以通过反思,但我认为这是一个肮脏的黑客.


Fre*_*örk 6

CLR中引发事件的大多数类型都有一个受保护的On [EventName]方法,它负责引发事件.您可以使用Reflection"从外部"调用此受保护的方法:

 Control parent = ((Control)sender).Parent;
 Type parentType = parent.GetType();
 MethodInfo onClickMethod = parentType.GetMethod("OnClick", BindingFlags.Instance | BindingFlags.NonPublic);

 onClickMethod.Invoke(parent, new object[] { e });
Run Code Online (Sandbox Code Playgroud)