.NET TIPS

Visual Basic 2005でスプラッシュ・スクリーンにメッセージを表示するには?[VS 2005のみ、VB]

デジタルアドバンテージ 遠藤 孝信
2007/08/30

 「TIPS:Visual Basic 2005でスプラッシュ・スクリーンを表示するには?」では、Visual Basic 2005(Visual Basic 2005 Express EditionあるいはVisual Studio 2005のVisual Basic。以下、VB 2005)で簡単にスプラッシュ・スクリーンを表示する方法について解説している。

 本稿では、メイン・フォームでの初期化処理の進行状況などを示すメッセージをスプラッシュ・スクリーンに表示する方法について解説する。VB 2005のスプラッシュ・スクリーンはメイン・フォームとは別のスレッドで実行されるため注意が必要だ。

スプラッシュ・スクリーンの修正

 まず、スプラッシュ・スクリーンとなるフォームにメッセージを表示するためのラベルを追加する。ここではこれを以下の画面のように行っている。なお、スプラッシュ・スクリーン自体の追加と設定については前掲のTIPSを参照してほしい。


メッセージ表示のためのLabelコントロールを追加したスプラッシュ・スクリーン
スプラッシュ・スクリーンのフォームの構成要素はTableLayoutPanelコントロール上に配置されているため、ここではTableLayoutPanelコントロールに行を追加し、そこにLabelコントロールを配置している。この画面ではフォームの構成が分かるように「ドキュメント・アウトライン」ウィンドウを表示している。これについては「TIPS:Visual Studio 2005でコントロールの選択/移動を簡単に行うには?」を参照。
  追加したLabelコントロール(コントロールの名前は「InitMessageLabel」としている)。

 メイン・フォーム(の初期化処理を行うLoadイベント・ハンドラ)からは、いま配置したLabelコントロールのTextプロパティに文字列を設定することによってメッセージを表示できるが、前述したようにスプラッシュ・スクリーンのフォームとメイン・フォームは別スレッドで実行されるため、Textプロパティを直接設定することはできない(.NET Framework 2.0以降ではこれを行うと実行時に例外が発生する)。

 このため、ここでは「TIPS:Windowsフォームで別スレッドからコントロールを操作するには?」で解説している手法を用いて、スプラッシュ・スクリーンのフォームに次のようなSetInitMessageメソッドを追加する。

Public NotInheritable Class SplashScreen1

  'TODO: このフォームは、プロジェクト デザイナ ([プロジェクト] メニューの下の [プロパティ]) の [アプリケーション] タブを使用して、
  '  アプリケーションのスプラッシュ スクリーンとして簡単に設定することができます


  Private Sub SplashScreen1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    'アプリケーションのアセンブリ情報に従って、ランタイムにダイアログ テキストを設定します。

    'TODO: [プロジェクト] メニューの下にある [プロジェクト プロパティ] ダイアログの [アプリケーション] ペインで、アプリケーションのアセンブリ情報を
    '  カスタマイズします

    'アプリケーション タイトル
    If My.Application.Info.Title <> "" Then
      ApplicationTitle.Text = My.Application.Info.Title
    Else
      'アプリケーション タイトルがない場合は、拡張子なしのアプリケーション名を使用します
      ApplicationTitle.Text = System.IO.Path.GetFileNameWithoutExtension(My.Application.Info.AssemblyName)
    End If


    'デザイン時に書式設定文字列としてバージョン管理で設定されたテキストを使用して、バージョン情報の書式を
    '  設定します。これにより効率的なローカリゼーションが可能になります。
    '  ビルドおよび リビジョン情報は、次のコードを使用したり、バージョン管理のデザイン時のテキストを
    '  "Version {0}.{1:00}.{2}.{3}" のように変更したりすることによって含めることができます。
    '  詳細については、ヘルプの String.Format() を参照してください。
    '
   
'  Version.Text = System.String.Format(Version.Text, My.Application.Info.Version.Major, My.Application.Info.Version.Minor, My.Application.Info.Version.Build, My.Application.Info.Version.Revision)

    Version.Text = System.String.Format(Version.Text, My.Application.Info.Version.Major, My.Application.Info.Version.Minor)

    '著作権情報
    Copyright.Text = My.Application.Info.Copyright
  End Sub

  Delegate Sub SetInitMessageDelegate(ByVal msg As String)

  Public Sub SetInitMessage(ByVal msg As String)
    If InvokeRequired Then
      ' 別スレッドから呼び出された場合
      Invoke(New SetInitMessageDelegate(AddressOf SetInitMessage), msg)
      Return
    End If
    Me.InitMessageLabel.Text = msg
  End Sub

End Class
スプラッシュ・スクリーン上のラベルにメッセージを表示するためのSetInitMessageDelegateメソッド
グレーの部分はVB 2005により自動作成されたコード。メソッドが別スレッドから呼び出された場合には、InvokeRequiredプロパティはTrueとなる。この場合にはInvokeメソッドにより、フォーム上のコントロールを操作するメソッドを実行すればよい。

 このSetInitMessageメソッドでは、メソッドが別スレッドから呼び出された場合にフォームのInvokeメソッドを経由して再度SetInitMessageメソッドを実行するようにしている。

メイン・フォームからのメソッドの呼び出し

 メイン・フォームからのSetInitMessageメソッドの呼び出しは、通常のメソッドと同じようにして行えばよい。例えば以下のようになる。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

  System.Threading.Thread.Sleep(2000) ' ダミー

  SplashScreen1.SetInitMessage("更新をチェックしています")
  System.Threading.Thread.Sleep(2000) ' ダミー

  SplashScreen1.SetInitMessage("リソースを読み込んでいます")
  System.Threading.Thread.Sleep(2000) ' ダミー

End Sub
メイン・フォームのLoadイベント・ハンドラの記述例

 この場合には、表示されるスプラッシュ・スクリーンは次のようになる。


メッセージを表示しているスプラッシュ・スクリーン

 上記のコードでは時間稼ぎのためにSleepメソッドを呼び出しているが、もちろん実際にはその部分で初期化処理などを行うことになる。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Visual Studio 2005 処理対象:プロジェクト
カテゴリ:Visual Basic 2005 処理対象:アプリケーション・フレームワーク
関連TIPS:Visual Basic 2005でスプラッシュ・スクリーンを表示するには?
関連TIPS:Visual Studio 2005でコントロールの選択/移動を簡単に行うには?
関連TIPS:Windowsフォームで別スレッドからコントロールを操作するには?

この記事と関連性の高い別の.NET TIPS
Visual Basic 2005でスプラッシュ・スクリーンを表示するには?
Visual Basic 2005でスプラッシュ・スクリーンの表示時間を変更するには?
Windowsアプリケーションでスプラッシュ・スクリーンを表示するには?
WPFでスプラッシュ・スクリーンを表示するには?
サブ・フォームからメイン・フォームのコントロールに値を設定するには?[C#、VB]
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間