0

メソッドControlをオーバーライドするカスタムがあります。OnInit

アップデート

Initイベントを通過する必要があるようですuserControl.GetType().GetEvent("Init")。ただし、RaiseMethodイベントのプロパティは、リフレクションを通じてイベントを発生させることnullができないためです。リードはありますか?

次のコードを使用してコントロールを読み込みます (ReflectionUtilリフレクションを使用してメソッドを呼び出します)。

        Page p = new Page();
        UserControl userControl = (UserControl)p.LoadControl(path);
        p.Controls.Add((Control)userControl);

        //EventArgs eventArgs = new EventArgs();

        //ReflectionUtil.CallMethod((object)p, "OnInit", (object[])new EventArgs[1] { eventArgs });
        //ReflectionUtil.CallMethod((object)userControl, "OnInit", (object[])new EventArgs[1] { eventArgs });

        //Plain Reflection doesn't work either...
        EventArgs eventArgs = new EventArgs();

        MethodInfo initMethod = userControl.GetType().GetMethod("OnInit");
        initMethod.Invoke(userControl, (object[])new EventArgs[1]
          {
            eventArgs
          });

ただし、カスタム コントロールのOnInitメソッドにブレークポイントを設定しても、呼び出されません。ここで何か不足していますか?どんな助けでも大歓迎です。

4

1 に答える 1

1

OnInitは保護されており、使用しているGetMethodオーバーロードはパブリックメソッドのみを取得します。

バインディングフラグNonPublicでオーバーロードを使用して、保護されたメソッドを取得できます。

于 2013-02-11T10:25:58.280 に答える