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

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

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

Re[7]: MessageBoxを常に最前面にだしたい


(過去ログ 67 を表示中)

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

■39182 / inTopicNo.1)  MessageBoxを常に最前面にだしたい
  
□投稿者/ プリ太 (33回)-(2009/07/31(Fri) 09:31:12)

分類:[C#] 

おはようございます。プリ太です。

昨晩から気になっていることなのですが、改善策が思いつかないので教えてください。

現在ファイルを読み込んだ時に、データがおかしい場合はメッセージボックスで警告を表示しています。
ただ、その時々によって、メッセージボックスが最前面に表示されたり、VSの下に入りこんだりします。

調べたところ、メッセージボックスの第1引数に"this"を設定するとよい、とみつけましたので、
第1引数にthisを追加してみたところ、コンパイルが通りませんでした。
コードは
MessageBox.Show(this, "Error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
ですが、現在1,3,4,5引数の型が違う、とエラーが出ます。
メッセージボックスの定義で第1引数にハンドラを設定することはできるようなのですが、
設定方法がなにか違うのでしょうか?
現在、thisを削除するとコンパイルは通ります。
メッセージボックスが潜るのは、アプリを立ち上げた状態でファイルを開くときよりは、ファイル名を引数渡ししたときのほうがより発生する気がします。


メッセージボックスが下に潜っても、タスクバーに表示されれば選択できるのですが、
現在、開いているものを1つずつ最小化していかないと探せません。
とても面倒なので、最前面に表示するか、それが無理ならタスクバーに表示したいのですが、
どちらか実現できないのでしょうか?

環境はVS2005です。
宜しくお願いします。
引用返信 編集キー/
■39184 / inTopicNo.2)  Re[1]: MessageBoxを常に最前面にだしたい
□投稿者/ 渋木宏明(ひどり) (1192回)-(2009/07/31(Fri) 10:05:04)
渋木宏明(ひどり) さんの Web サイト
> 調べたところ、メッセージボックスの第1引数に"this"を設定するとよい、とみつけましたので、
> 第1引数にthisを追加してみたところ、コンパイルが通りませんでした。

あなたが指定した "this" の型は何ですか?

あと、MessageBox.Show() のヘルプをしっかり読んで、何が必要なのかをきちんと確認してみましょう。

MessageBOx.Show() にはいくつものオーバーロードがありますが、この局面であなたにが(暗に)期待しているのは

Show(IWin32Window, String, String, MessageBoxButtons, MessageBoxIcon)

の形式の Show() メソッドのようです。

第一引数の IWin32Window はメッセージボックスの「親ウィンドウとなるべきウィンドウ、またはそのウィンドウ上に配置されたコントロール」を示すものです。

なので、ざっくり言って、第一引数は Control や Form でなければなりません。
引用返信 編集キー/
■39185 / inTopicNo.3)  Re[1]: MessageBoxを常に最前面にだしたい
□投稿者/ はつね (1049回)-(2009/07/31(Fri) 10:14:41)
はつね さんの Web サイト
No39182 (プリ太 さん) に返信
> 調べたところ、メッセージボックスの第1引数に"this"を設定するとよい、とみつけましたので、
> 第1引数にthisを追加してみたところ、コンパイルが通りませんでした。
> コードは
> MessageBox.Show(this, "Error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

WindowsフォームじゃなくところでMessageBoxだそうとしてませんか?

引用返信 編集キー/
■39187 / inTopicNo.4)  Re[2]: MessageBoxを常に最前面にだしたい
□投稿者/ プリ太 (34回)-(2009/07/31(Fri) 10:33:51)
プリ太です。

渋木宏明(ひどり) さん、はつねさん、ありがとうございます。

このメッセージボックス、MDIフォームから呼ばれるファイル処理用クラスで表示しようとしています。
ということは、"this"のみの記述だとクラスを指すのでコンパイルエラーということですね。
#第1引数に親フォームを指定してやればいいということですね。

ただ、ファイルを引数渡しでアプリ起動の場合、タイミング的にまだMDIが表示されてないタイミングでメッセージが表示されるのですが、
これでも指定はできるのでしょうか?

とりあえず、親フォームを指定するようにコードを変更してみます。


引用返信 編集キー/
■39196 / inTopicNo.5)  Re[3]: MessageBoxを常に最前面にだしたい
□投稿者/ プリ太 (35回)-(2009/07/31(Fri) 11:47:11)
プリ太です。

ファイル処理クラスに、MDIのハンドルを渡してやり、それを第1引数に設定してやるとコンパイルが通るようになりました。

実行してみたところ、ファイルを選択してそのままだと最前面に表示されるようになりました。
ただ、メッセーが表示するまでに他の画面のフォーカスが移動するともちろん下にもぐります。

まだMDIが表示される前なので、タスクバーから選択はできないため、
メッセージがタスクバーに表示されるように頑張ってみます。

コンパイルは通り、表示されるようになりましたので、一旦解決とさせていただきます。
ありがとうございました。
解決済み
引用返信 編集キー/
■39197 / inTopicNo.6)  Re[4]: MessageBoxを常に最前面にだしたい
□投稿者/ 渋木宏明(ひどり) (1193回)-(2009/07/31(Fri) 11:56:28)
渋木宏明(ひどり) さんの Web サイト
> 実行してみたところ、ファイルを選択してそのままだと最前面に表示されるようになりました。
> ただ、メッセーが表示するまでに他の画面のフォーカスが移動するともちろん下にもぐります。

そんな状況が起こり得るものなのかな?
別スレッドで何かやってたりするんですか?

MessageBox.Show の第一引数に、MDI 子ウィンドウじゃなくて、メインウィンドウの Form を指定してみるとか。

> メッセージがタスクバーに表示されるように頑張ってみます。

タスクバーには表示されないと思いますが…

解決済み
引用返信 編集キー/
■39207 / inTopicNo.7)  Re[5]: MessageBoxを常に最前面にだしたい
□投稿者/ プリ太 (36回)-(2009/07/31(Fri) 13:56:57)
渋木宏明(ひどり) さん ありがとうございます。

>>実行してみたところ、ファイルを選択してそのままだと最前面に表示されるようになりました。
>>ただ、メッセーが表示するまでに他の画面のフォーカスが移動するともちろん下にもぐります。
>
> そんな状況が起こり得るものなのかな?
> 別スレッドで何かやってたりするんですか?

いいえ。
書き方が分かりにくかったのですが、
ファイル選択ダイアログでファイル指定後、ファイルを読み込んでいる間にIE等をアクティブにすると、その下にもぐります。
それは当たり前の動作(だと思っています)なので、問題ありません。

メッセージボックスのOKボタンを押さないことにはアプリの起動はおこなわれないので、
もぐってしまうと、メッセージボックスを探すために、開いているIE等を最小化してメッセージボックスを探さないといけないのが面倒だなぁ、とは思いますが。
デバッグしていてもファイル選択後メッセージが表示されるまでの間に、
マウスを触ったはずみに他のアプリにアクティブが移動して潜ったりすることがあるので、タスクバーに表示できないかなぁ、と思ったのです。


> MessageBox.Show の第一引数に、MDI 子ウィンドウじゃなくて、メインウィンドウの Form を指定してみるとか。
>
>>メッセージがタスクバーに表示されるように頑張ってみます。
>
> タスクバーには表示されないと思いますが…

やっぱりそうなんですか。
調べてもわからなかったのでひょっとして?と思い始めたところです。

タスクバーに表示させようと思ったらダイアログで自作するしかないということでしょうか。
解決済み
引用返信 編集キー/
■39221 / inTopicNo.8)  Re[6]: MessageBoxを常に最前面にだしたい
□投稿者/ 渋木宏明(ひどり) (1194回)-(2009/07/31(Fri) 17:50:43)
渋木宏明(ひどり) さんの Web サイト
>>タスクバーには表示されないと思いますが…
>
> やっぱりそうなんですか。
> 調べてもわからなかったのでひょっとして?と思い始めたところです。
>
> タスクバーに表示させようと思ったらダイアログで自作するしかないということでしょうか。

あー、ひょとして「タスクバーにメッセージを表示させたい」みたいな無茶を言っているわけではなく、「タスクバーにメッセージボックスを前面化させるためのタスクバーボタンを表示させたい」ってことですか?

であるなら、メインウィンドウが既に存在していて、そのメインウィンドウあるいはメインウィンドウ内に配置されたコントロール(や MDI 子ウィンドウ)を親ウィンドウととして指定してメッセージボックスを表示した場合はできません。

メッセージボックスに親ウィンドウを指定した場合、その親(または最上位の親)ウィンドウに対応するタスクバーボタンが表示されていはずで、そのタスクバーボタンをクリックした時、親ウィンドウとともにメッセージボックスが前面化するのが「Windows UI の仕様」です。

メインウィンドウの表示前など、親となるべきウィンドウが表示されいない状態で、親ウィンドウの指定なしでメッセージボックスを表示した場合、メッセージボックスそのものがメインウィンドウ扱いになるので、対応するタスクバーボタンをクリックすると、メッセージボックスが前面化します。
引用返信 編集キー/
■39224 / inTopicNo.9)  Re[7]: MessageBoxを常に最前面にだしたい
□投稿者/ プリ太 (37回)-(2009/07/31(Fri) 19:17:16)
渋木宏明(ひどり) さん、ありがとうございます。

>>タスクバーに表示させようと思ったらダイアログで自作するしかないということでしょうか。
>
> あー、ひょとして「タスクバーにメッセージを表示させたい」みたいな無茶を言っているわけではなく、「タスクバーにメッセージボックスを前面化させるためのタスクバーボタンを表示させたい」ってことですか?

ハイ。その通りです。


> であるなら、メインウィンドウが既に存在していて、そのメインウィンドウあるいはメインウィンドウ内に配置されたコントロール(や MDI 子ウィンドウ)を親ウィンドウととして指定してメッセージボックスを表示した場合はできません。
>
> メッセージボックスに親ウィンドウを指定した場合、その親(または最上位の親)ウィンドウに対応するタスクバーボタンが表示されていはずで、そのタスクバーボタンをクリックした時、親ウィンドウとともにメッセージボックスが前面化するのが「Windows UI の仕様」です。
>
> メインウィンドウの表示前など、親となるべきウィンドウが表示されいない状態で、親ウィンドウの指定なしでメッセージボックスを表示した場合、メッセージボックスそのものがメインウィンドウ扱いになるので、対応するタスクバーボタンをクリックすると、メッセージボックスが前面化します。

ファイル名を引数渡しでアプリを起動する場合、ファイル読み込みエラーのメッセージを表示するタイミングはMDIが表示される前です。
なので、まだMDIのタスクバーは表示されていません。
そのため、前面化ができなかったのです。

ちなみに現在、MDIを親ウィンドウとして第1引数に指定してもしなくても、タスクバーは表示されません。
う〜ん、、、自作???が頭をよぎっているところです。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -