2

クラスで Main () 関数を使用して、vb .net Windows Forms アプリケーションのプログラム フローを制御しようとしています。スプラッシュ スクリーン コンポーネントとログイン スクリーンを追加し、メインの sdi フォームをカスタマイズしました。プロジェクト デザイナのアプリケーション ページで、スタートアップ フォームをメイン機能として設定しましたが、すべて正常に動作しているようです。

ただし、使用したい: Me.MinimumSplashScreenDisplayTime = 5000

スプラッシュ スクリーンが確実に表示されるようにしますが、プロジェクト デザイナーの [アプリケーション フレームワークを有効にする] チェック ボックスをオンにしない限り、システムによって認識されません。これを行うと、AF ドロップダウン リストでスプラッシュ スクリーンも指定しているにもかかわらず、プログラムは起動時にログイン画面とスプラッシュ スクリーン、およびすべてのカスタマイズを無視し、デフォルトの Form1 のみを表示します。

もちろん、スレッドを一時的にスリープ状態にするなど、スプラッシュ スクリーンを遅らせる別の方法もありますが (これは機能していないようです)、AF には他にも使用したい機能があるのではないかと思います。

これをどのように回避し、プログラムフローを制御する賢明な手段を得ることができるかについての提案はありますか? プログラム フローを整理するための最適な全体構造についての考えも役に立ちます。アプリケーションがより複雑になるにつれて、後で問題を引き起こす可能性がある Microsoft または別のカスタム ルートの両方を懸念しています。

ありがとう。

* アップデート *

また会ったね。私は両方の答えを試し、Hans Passant からこれをコードに組み込み、最終的にすべてのエラー メッセージを解決しました。ただし、スプラッシュ画面が 5 秒間開いたままにならないため、問題は解決していません。アプリケーション フレームワークが使用されている場合にのみ、MS スプラッシュ スクリーンと最小表示時間コードにアクセスできるようです。フォーム。何か(もっと)アイデアはありますか?ありがとう。

4

2 に答える 2

1

これを試して:

Protected Overrides Function OnInitialize( _
    ByVal commandLineArgs As _
    System.Collections.ObjectModel.ReadOnlyCollection(Of String) _
) As Boolean
    ''# Set the display time to 5000 milliseconds (5 seconds). 
    Me.MinimumSplashScreenDisplayTime = 5000
    Return MyBase.OnInitialize(commandLineArgs)
End Function

これは MSDN サイトから削除されました。

于 2010-04-30T11:37:53.583 に答える
1

Startup イベントを使用して Sub Main() でやりたいことを実行できるはずです。[プロジェクト + プロパティ] の [アプリケーション] タブで下にスクロールし、[アプリケーション イベントの表示] をクリックします。左上のコンボで、「(My Application Events)」を選択します。右上のコンボで、スタートアップを選択します。

それでも、アプリケーション フレームワークを取得して、Sub Main() を介して起動することはできます。プロジェクトにモジュールを追加して、次のようにします。

Imports Microsoft.VisualBasic.ApplicationServices

Module Module1
  Sub Main(ByVal args() As String)
    Dim app As New MyApp
    app.Run(args)
  End Sub
End Module

Class MyApp
  Inherits WindowsFormsApplicationBase
  Public Sub New()
    Me.SplashScreen = New SplashScreen1()
    Me.MinimumSplashScreenDisplayTime = 5000
  End Sub
  Protected Overrides Sub OnCreateMainForm()
    Me.MainForm = New Form1()
  End Sub
End Class
于 2010-04-30T11:40:35.163 に答える