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

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

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

Re[3]: MessageBoxを消す方法について


(過去ログ 37 を表示中)

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

■19310 / inTopicNo.1)  MessageBoxを消す方法について
  
□投稿者/ あら (56回)-(2008/05/22(Thu) 09:19:47)

分類:[C#] 

Form1からMessageBoxを表示させ、特定のイベントが発生したら
表示させたMessageBoxを自動で消したいと思っています。

このようなことは可能なのでしょうか?

VS2005 .NET2.0
引用返信 編集キー/
■19312 / inTopicNo.2)  Re[1]: MessageBoxを消す方法について
□投稿者/ はつね (724回)-(2008/05/22(Thu) 09:41:46)
はつね さんの Web サイト
No19310 (あら さん) に返信
> Form1からMessageBoxを表示させ、特定のイベントが発生したら
> 表示させたMessageBoxを自動で消したいと思っています。

MessageBoxはモーダル表示です。特定のイベントはどこで発生するのでしょうか。
別のEXEとかからでしょうか。

できるかどうか分かりませんが、MessageBoxのWHNDをとって[ENTER]キーのキーコー
ドを送りつける方法が考えられますが、やっつけ仕事的な印象があります。
ちゃんと、EXE間の通信方式を設計して、MessageBoxもそれらしいフォームを自作
して、EXE間の通信をそのMessageBoxもどきフォームで受け取って閉じるような
流れの方がいいと思います。

引用返信 編集キー/
■19320 / inTopicNo.3)  Re[2]: MessageBoxを消す方法について
□投稿者/ あら (58回)-(2008/05/22(Thu) 10:36:47)
返信ありがとうございます。

> > MessageBoxはモーダル表示です。特定のイベントはどこで発生するのでしょうか。
> 別のEXEとかからでしょうか。
すみません。イベントは発生しませんでした。。。

特定のイベントとは、USBキー抜き差しで発生するイベントのことを想定して記載しました。
USBが抜かれるとMessageBoxを表示させて、再度USBを挿すとMessageBoxを消そうとしていま
した。


> ちゃんと、EXE間の通信方式を設計して、MessageBoxもそれらしいフォームを自作
> して、EXE間の通信をそのMessageBoxもどきフォームで受け取って閉じるような
> 流れの方がいいと思います。
こちらのほうで試してみたいと思います。

説明が不足していて申し訳ありませんでした。

ありがとうございます。


解決済み
引用返信 編集キー/
■19348 / inTopicNo.4)  Re[3]: MessageBoxを消す方法について
□投稿者/ とっちゃん (298回)-(2008/05/22(Thu) 14:20:03)
とっちゃん さんの Web サイト
No19320 (あら さん) に返信

> 特定のイベントとは、USBキー抜き差しで発生するイベントのことを想定して記載しました。
> USBが抜かれるとMessageBoxを表示させて、再度USBを挿すとMessageBoxを消そうとしていま
> した。
Win32のレベルではイベントがあります。.NET 側にはマップされていませんが。
WM_DEVICECHANGED メッセージ辺りから掘り下げていけば、いろいろ情報が発掘できるはずです。
ただし、USBの種類によってはいろいろやらないとだめとかOSによってとかがあるので
必ずしも検出できるとは言い切れませんが。


>>ちゃんと、EXE間の通信方式を設計して、MessageBoxもそれらしいフォームを自作
>>して、EXE間の通信をそのMessageBoxもどきフォームで受け取って閉じるような
>>流れの方がいいと思います。
> こちらのほうで試してみたいと思います。
>
> 説明が不足していて申し訳ありませんでした。
>
> ありがとうございます。
>
>
こちらもついでに、
同一スレッド上(今回の例であれば、WM_DEVICECHANGEメッセージをハンドリングしたところ)で
モーダルウィンドウを探してきて(メッセージボックスは特殊なモーダルダイアログとして
探すことは可能)、そのウィンドウにWM_CLOSEを投げることでウィンドウを閉じることができます。
(まれに閉じさせない場合もありますが、メッセージボックスがどっちになってるかは不明)。
その代わり、メッセージボックスを出す部分では、OKなら続行とかその辺きっちりやっておかないと
ぐだぐだになります。

なので、ちゃんとやるのであれば、メッセージボックスは使わずに自前のダイアログを用意する
ということをお勧めします。
これなら、そのダイアログがイベントを捕まえることができますし(WM_DEVICECHANGEはトップレベルウィンドウに発行される)
状態的に閉じた処理が可能となるので、実装は比較的楽になるのではと思います。


引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -