- - PR -
モーダルフォームの閉じ方
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-12-20 14:36
直接の回答ではありませんが、昔から、なぜかモーダルなダイアログを表示する API は、同期的な(ブロックされる)呼び出ししかできず、したがって呼び出す側からは閉じることができないということが多いようです。でも、モーダルかモードレスかと言うことと、呼び出しが同期か非同期かと言うこととは直接の関連はないはずです。
スレッドを分けたり、呼び出す側から呼び出された側になんらかの方法で「自分で閉じろ」みたいなメッセージを送って、閉じさせる方法はあるみたいですが、なんだかしっくり来ない感じがします。 そのためか、本来モーダルであるほうが自然な場面なのに、非モーダルになっている、というアプリケーションに出くわすことも多いです。 | ||||||||
|
投稿日時: 2005-12-20 15:33
回答、ありがとうございます。
上記の方法で対応できそうです。 子のフォームで「しばらくお待ちください。」というメッセージを出しています。 親画面ではループ処理をしています。 その間、子のフォームは表示されるのですが「しばらくお待ちください。」の文字が表示されません。このような場合はどのように対応すればよいでしょうか? | ||||||||
|
投稿日時: 2005-12-20 15:50
私だったら、こういう場合は子フォームでループを回すことを考えますけどね。 ま、私はC#は知らんのでこの辺で。ノシ | ||||||||
|
投稿日時: 2005-12-20 15:59
ループ処理中に子フォームがメッセージを受け取れず描画できないために起こります。 Label1.Text = "しばらくお待ちください" Label1.Refresh と強制的に描画してあげるとよいでしょう。 | ||||||||
|
投稿日時: 2005-12-20 16:05
これでは無理じゃなかったですかね? Updateなら強制描画できた気はしますが。 きっちりやりたいならもっとちゃんとやる必要があります。 | ||||||||
|
投稿日時: 2005-12-20 16:08
よく考えにあがることですが、結果的にそうなった例は少ないなぁ。。 結局、事後論ではなくて、事前にその処理の性質やどこに所属するかによって 親から離してクラスライブラリにしたりと設計の問題でしょうね。 私の場合はその場合でも進捗表示専用として実装するでしょう。たぶん。 一体化するとメソッドで無くなりますし。 | ||||||||
|
投稿日時: 2005-12-20 16:14
上記方法で解決できました。
助かりました、ありがとうございます。 | ||||||||
|
投稿日時: 2005-12-20 16:26
え?いままで描画できなかったことは無いんですが。 ちょっと不安になっちゃった。。。 「どぼんさん」 http://dobon.net/vb/dotnet/control/refreshupdateinvalidate.html |