C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: フォームを表示させる方法


(過去ログ 163 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■94101 / inTopicNo.1)  フォームを表示させる方法
  
□投稿者/ aaa (5回)-(2020/03/13(Fri) 11:51:05)

分類:[.NET 全般] 

昨日 
■94091 / inTopicNo.1  モジュールでのメッセージボックス表示
について質問させていただき、回答していただいた通りに設定を変更したところ新たな問題が出てきたので質問させてください。

スタートアップオブジェクトに設定しているSub Main関数でフォーム表示処理を行っていますが、
アプリケーションを起動してもフォームが表示されずにすぐに閉じてしまいます。

どなたかアプリケーションを起動してフォームを表示させる方法を教えてください。
よろしくお願いします。
引用返信 編集キー/
■94102 / inTopicNo.2)  Re[1]: フォームを表示させる方法
□投稿者/ KOZ (90回)-(2020/03/13(Fri) 12:19:07)
2020/03/13(Fri) 12:27:05 編集(投稿者)
No94101 (aaa さん) に返信
> スタートアップオブジェクトに設定しているSub Main関数でフォーム表示処理を行っていますが、
> アプリケーションを起動してもフォームが表示されずにすぐに閉じてしまいます。

VB6 と同様に動かす(すべてのフォームが閉じたときに終了)のであれば、
Sub Main を書いたモジュールを以下の様に置き換えてみてください。

Imports Microsoft.VisualBasic.ApplicationServices

Friend Class MyApplication
    Inherits WindowsFormsApplicationBase

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

    Protected Overrides Sub OnCreateMainForm()
        MyBase.MainForm = New Form1()
    End Sub

End Class

引用返信 編集キー/
■94103 / inTopicNo.3)  Re[2]: フォームを表示させる方法
□投稿者/ aaa (6回)-(2020/03/13(Fri) 14:16:05)
> ■No94101 (aaa さん) に返信
>>スタートアップオブジェクトに設定しているSub Main関数でフォーム表示処理を行っていますが、
>>アプリケーションを起動してもフォームが表示されずにすぐに閉じてしまいます。
>
> VB6 と同様に動かす(すべてのフォームが閉じたときに終了)のであれば、
> Sub Main を書いたモジュールを以下の様に置き換えてみてください。
>
> Imports Microsoft.VisualBasic.ApplicationServices
>
> Friend Class MyApplication
> Inherits WindowsFormsApplicationBase
>
> <STAThread>
> Friend Shared Sub Main(ByVal Args As String())
> Application.EnableVisualStyles()
> Application.SetCompatibleTextRenderingDefault(False)
> ' ここで初期処理
> With New MyApplication
> .ShutdownStyle = ShutdownMode.AfterAllFormsClose
> .Run(Args)
> End With
> End Sub
>
> Protected Overrides Sub OnCreateMainForm()
> MyBase.MainForm = New Form1()
> End Sub
>
> End Class


返信ありがとうございます。
KOZ さんに教えていただいた通りにコードを修正したところ、
ちゃんとフォームが表示されるようになりました。

ありがとうございました。

解決済み
引用返信 編集キー/
■94104 / inTopicNo.4)  Re[1]: フォームを表示させる方法
□投稿者/ 魔界の仮面弁士 (2612回)-(2020/03/13(Fri) 14:25:35)
No94101 (aaa さん) に返信
> スタートアップオブジェクトに設定しているSub Main関数でフォーム表示処理を行っていますが、
> アプリケーションを起動してもフォームが表示されずにすぐに閉じてしまいます。

ShowDialog メソッドでモーダルなフォームを表示するのではなく、
Show メソッドでモードレスとして表示されているのですよね。

だとすると、Show を呼んだあとに End Sub に到達してしまい、
プログラム自体が終了してしまっているはずです。


Show を呼ぶのではなく、メインフォームのインスタンスを
Application.Run メソッドまたは MyApplication.Run メソッドの引数に渡せば、
そのフォームが閉じられるまで、Sub Main が終了せずにすみます。


しかし、そもそも Sub Main() を使わないという選択肢もあります。


(1) プロジェクトのプロパティ(My Project)の、[アプリケーション]タブを開く。

(2)「アプリケーション フレームワークを有効にする」は On のままにしておく。

(3)「シャットダウンモード」に、どちらか好きなモードを指定する。
 ※"最後のフォームが閉じるとき" を指定すると、VB6 の動作に近くなります。

(4) 同画面右下の「アプリケーション イベントの表示」ボタンを押す。

(5) ApplicationEvents.vb 編集画面上部にならぶ 3 つのドロップダウンのうち、
 中央のものから「(MyApplication イベント)」を選択し、
 右側のものから「Startup」を選択して、
 これを Sub Main の代わりにする。


Private Sub MyApplication_Startup(sender As Object, e As StartupEventArgs) Handles Me.Startup
  'For Each arg As String In e.CommandLine
  '  Debug.WriteLine(arg)
  'Next

  If 任意の起動判定処理 Then
    'スタートアップフォームを起動させず、アプリを終了させる
    e.Cancel = True
  Else
    '通常通り、スタートアップフォームの起動処理に進ませる
    e.Cancel = True
  End If
End Sub
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -