(.Net)メッセージボックスを最前面に表示したい
現在 BackgroundWorker コンポーネントを使ったマルチスレッドアプリケーションを使ってます。
メインスレッドはフォームのUIを表示し、別スレッドで動くBackgroundWorker.DoWorkイベントハンドラで時間のかかる処理をしています。

この別スレッド側でメッセージボックスを表示したときに、メインスレッドのフォームUIより手前に表示したい かつ 最前面に表示というのが今回の要件です。
(ちなみに、フォームの TopMost プロパティが true でも最前面に表示になるので、メッセージボックスをお手製で作って TopMost プロパティを使うという方法もとれるかもしれません。)

MessageBox クラスには IWin32Window を指定することで、指定したオブジェクより前面に表示する Show メソッドがありますが、今回は最前面に表示したいので、その方法は使いませんでした。

で、調べると、MessageBoxOptions 列挙体MessageBox.Show メソッドに指定することによって最前面に表示ができるようです。

MessageBoxOptions 列挙体で、DefaultDesktopOnly か ServiceNotification を指定したら最前面に表示されました。他のウィンドウに隠れることはありません。
ただし、visual スタイルを使用できないで、古臭いUIにはなります。

DefaultDesktopOnly と ServiceNotification の違いですが、DefaultDesktopOnlyでは既定のデスクトップ(ユーザーがログオンした後でアプリケーションが動作するデスクトップ)でのみ表示され、ServiceNotificationはログインしているユーザーがいない場合でもメッセージボックスが表示されます。
ServiceNotificationは主に、サービスからのメッセージボックス表示に使われるようです。

ユーザログインしてから使うアプリケーションから表示するものだったので、DefaultDesktopOnly を指定しました。

テストソースは下記のような感じです。(C#)

MessageBox.Show("test",
"caption",
MessageBoxButtons.OKCancel,
MessageBoxIcon.Information,
MessageBoxDefaultButton.Button1,
MessageBoxOptions.DefaultDesktopOnly);



参考:
メッセージボックスを表示する: .NET Tips: C#, VB.NET, Visual Studio
Program.csでメッセージボックスを最前面に出す方法
[C#]同じこと考える人いるんですね - Program.csでメッセージボックスを最前面に出す方法
[PR]
by jehoshaphat | 2011-06-30 22:29 | .Net開発 | Trackback | Comments(0)
トラックバックURL : http://jehupc.exblog.jp/tb/15041886
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。


<< SQLiteManagerでU... (.Net)File.Crea... >>