コントロールのイベントを処理するために割り当てられているメソッドを (外部から) 見つけて、別のコントロールの同じイベントを処理するために同じメソッドを割り当てたいと考えています。次の方法を試しましたが、成功しませんでした。
private void ReflectMethods(Control control, Control baseControl, string[] excludedEventNames = null, string[] includedEventNames = null)
{
Type baseType = baseControl.GetType();
Type ownType = control.GetType();
foreach (EventInfo baseEventInfo in baseType.GetEvents())
{
if (excludedEventNames != null && excludedEventNames.Contains(baseEventInfo.Name))
continue;
if (includedEventNames != null && !includedEventNames.Contains(baseEventInfo.Name))
continue;
//
// Checking if current control has the same event..
//
foreach (EventInfo ownEventInfo in ownType.GetEvents())
{
if (ownEventInfo.Name == baseEventInfo.Name)
{
FieldInfo eventField = baseType.GetField(baseEventInfo.Name, BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance);
// The above line always returns null, so I cannot get the handler ???
EventHandler eventHandler = (EventHandler)eventField.GetValue(baseControl);
ownEventInfo.AddEventHandler(this, eventHandler);
}
}
}
}