2015年3月19日木曜日

VB SplashScreen と MessageBox

SplashScreen 、自前のソフトの起動時に表示される あれ ですね。
これをプロジェクトに加えると、ちんけな自前ソフトが、何だか、 いっちょまえ になった気がして、嬉しくなります。
唯、ここで、困った事が。
スタートアップの フォーム から呼び出される 初期設定に係る MessageBox が 隠れるケース があるのです。


う~ん、悩ましいですね。

MessageBox は、ある条件の下、表示される場合がある様に、コーディングしています。
                                      スタートアップの フォーム にです。  SplashScreen にではありません。.

MessageBox.Show("設定作業 開始")

こんな感じに書いていますが、最前部表示 にならないケースが。  うっ、隠れちゃう ... 。
これは、パソコンで実行中の他のプロセス との兼ね合いもあって、最前部に表示したいのですが ... 。
次のコードでも、ケースによっては、他のプロセスが画面を上書きしてしまいます。  Owner を自分 (Me) にして。.

MessageBox.Show(Me, "設定作業 開始")

  話が前後しますが、SplashScreen の導入は実に簡単です。
  プロジェクトに スプラッシュスクリーン を新規で追加するだけですから。
  最も、見た目の構成で、 画像を選んだり、LayoutPanel を弄ったりの作業は必要ですが ... 。
  そして、この SplashScreen は、メインスレッドとは別のスレッドで実行されるのだそうです。


さて、困った。

MessageBox を止め、簡単な Form ( や Window ) を追加して、TopMost 指定して表示する手もあるのでしょうが ... 。
他のプロセス との兼ね合い で、最前部とは限りませんし ... 。
第一、面倒ですし ... 。

検索して見ると ... 。  ありました、ありました。  対処法。

MessageBox.Show("message", _
                               "title", _
                               MessageBoxButtons.OK, _
                               MessageBoxIcon.Exclamation, _
                               MessageBoxDefaultButton.Button1, _
                               MessageBoxOptions.DefaultDesktopOnly)

6番目の引数が重要です。
MessageBoxOptions.DefaultDesktopOnly によって、最前部に表示されます。
但し、これを指定する為に、前の5つも 指定しなければ いけません。
MessageBoxIcon.Exclamation は、メッセージの内容に合わせ、適宜、変更して下さい。
また、 この指定では、xp visual スタイルを使用しません。
故に、標準のものと少し見た目が異なります。  通常、xp visual スタイル は有効になっています。.


尚、MessageBoxOptions.ServiceNotification と言う もの ( Const ) もあって、
これは、読んで字の如く、Service が通知を必要とする場合に使うんだそうです。
そして、ユーザーがログインしていない状態でも、表示されるんだそうで ... 。  ... 、脱線。



[2015/03/19] MessageBox 記載場所を追記。  一部 語句訂正。

0 件のコメント:

コメントを投稿