Top / .NET備忘録 / 07.Form / 03.Show メソッド

ぶっちゃけた話、無理

VB6.0 と同様の動きをさせようとすると、他の部分に頼らざらるを得ません。

どこかで Application.Run() を実行しなければならないのですが、実行してしまうと、そこで処理が止まります。

VB6.0 の場合は、ユーザーが作ったウインドウのほかに、隠しウインドウが存在し、メッセージループを実行していましたが、VB.NET には存在しません。

似たようなことをしようとすると、Sub Main の最後に、Application.Run() を入れるくらいでしょうか。

 Imports VB6Control.Global
 
 Module Program
     <STAThread()> _
     Sub Main()
         Application.EnableVisualStyles()
         Application.SetCompatibleTextRenderingDefault(False)
         Load(Form1)
         Form1.Show()
         Application.Run()
     End Sub
 End Module

そのうえで、OnFormClosed 中で、OpenForms コレクションがなくなったら、Application.Exit() を実行するようにしておきます。

        protected override void OnFormClosed(FormClosedEventArgs e)
        {
            if (!m_FormClosed) base.OnFormClosed(e);
            if (Application.MessageLoop && Application.OpenForms.Count == 0)
                Application.Exit();
        }

後日談

こんな感じでいけるっぽい

Imports Microsoft.VisualBasic.ApplicationServices

Friend Class MyApp
    Inherits WindowsFormsApplicationBase

    <STAThread>
    Friend Shared Sub Main(ByVal Args As String())
        Application.EnableVisualStyles()
        Application.SetCompatibleTextRenderingDefault(False)
        ' ここで初期処理
        With New MyApp
            .ShutdownStyle = ShutdownMode.AfterAllFormsClose
            .MainForm = Form1
            .Run(Args)
        End With
    End Sub

End Class



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2013-03-19 (火) 09:20:40 (2574d)