none
OnCreateMainFormの呼び出し条件について RRS feed

  • 質問

  • お世話になります。ApplicationEvents.vb内にて
    Namespace My

        Partial Friend Class MyApplication

            Protected Overrides Sub OnCreateMainForm()
            End Sub

            Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup

                Me.MainForm = New MyForm() 'この行を実行するとOnCreateMainFormメソッドが実行されない

            End Sub
        End Class
    End Namespace

    のようなサンプルコードを作成しました。

    [質問]
    MyApplication_Startupメソッド内にてMe.Mainformに何かしらのフォームが設定すると
    OnCreateMainFormが呼び出されないのでしょうか?

    Me.MainformがNotingのままであればOnCreateMainFormは呼び出されます。
    また一度Me.Mainformに値を設定した後、Nothingに戻そうとすると実行時例外が発生します。

    アプリケーション・フレームワークは有効にしてあります。

    [環境]
    .Net Framework2.0
    VisualStudio2005

    よろしくお願いいたします。

    2009年12月21日 13:41

回答

  • .NetFrameworkのソースを追ってみました。

    OnStartupもしくはStartupイベントでキャンセルしなければ、OnRunが呼ばれます。
    このOnRunの中でMainFormがnothingの場合のみOnCreateMainFormが呼ばれています。
    ですから、Startupイベント中でMainFormに設定してしまうとOnCreateMainFormは呼ばれません。

    MainFormにNothingが設定できないのは、MainFormプロパティでNothingの代入が許可されていないからですね。
    2009年12月22日 3:49

すべての返信

  • .NetFrameworkのソースを追ってみました。

    OnStartupもしくはStartupイベントでキャンセルしなければ、OnRunが呼ばれます。
    このOnRunの中でMainFormがnothingの場合のみOnCreateMainFormが呼ばれています。
    ですから、Startupイベント中でMainFormに設定してしまうとOnCreateMainFormは呼ばれません。

    MainFormにNothingが設定できないのは、MainFormプロパティでNothingの代入が許可されていないからですね。
    2009年12月22日 3:49
  • ありがとうございました。
    大変助かりました。
    2009年12月22日 22:47