LinkButton
ページ上のメソッドを動的に作成された s にバインドするメソッドがあります。
protected virtual void AddDynamicHandlerToControl(Page page, Control controlInstance,
string methodName, string eventName)
{
Delegate d = null;
EventInfo ei = controlInstance.GetType().GetEvent(eventName);
Type tDelegate = ei.EventHandlerType;
MethodInfo method = page.GetType().BaseType.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);
if (method != null)
d = Delegate.CreateDelegate(tDelegate, page, method);
else {
FieldInfo field = page.GetType().BaseType.GetField(methodName, BindingFlags.NonPublic | BindingFlags.Instance);
if (field != null)
{
d = field.GetValue(page) as Delegate;
}
}
MethodInfo addHandler = ei.GetAddMethod();
object[] addHandlerArgs = { d };
addHandler.Invoke(controlInstance, addHandlerArgs);
}
これは、そのページ内のメソッドに対して機能します。私が追加したかったのは、ユーザー コントロール内のメソッドのサポートです。そこでdelegate
、ページのコード ビハインドに を作成し、実行時にユーザー コントロール メソッドに割り当てました。
次のようにデリゲートを作成して割り当てます。
protected event PrintPageMethod PrintPage;
protected delegate void PrintPageMethod(object sender, EventArgs e);
その後:
PrintPage = DetailedTestsResult1.UserActionsForTests1_PrintPage;
コードはメソッドを見つけようとします。見つからない場合は、デリゲートのフィールドを見つけて、ユーザー コントロール クラスをターゲットとして正しいメソッドを指す正しいデリゲートを見つけます。
問題は、addHandler.Invoke(controlInstance, addHandlerArgs);
到達すると例外としてスローされることです
'SomePage+PrintPageMethod' 型のオブジェクトは、'System.EventHandler' 型に変換できません。
そして、私は自分が間違っていることを理解できません。