- PR -

モーダルフォームの閉じ方

投稿者投稿内容
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2005-12-20 14:36
直接の回答ではありませんが、昔から、なぜかモーダルなダイアログを表示する API は、同期的な(ブロックされる)呼び出ししかできず、したがって呼び出す側からは閉じることができないということが多いようです。でも、モーダルかモードレスかと言うことと、呼び出しが同期か非同期かと言うこととは直接の関連はないはずです。
スレッドを分けたり、呼び出す側から呼び出された側になんらかの方法で「自分で閉じろ」みたいなメッセージを送って、閉じさせる方法はあるみたいですが、なんだかしっくり来ない感じがします。
そのためか、本来モーダルであるほうが自然な場面なのに、非モーダルになっている、というアプリケーションに出くわすことも多いです。
キラ
大ベテラン
会議室デビュー日: 2005/12/10
投稿数: 104
投稿日時: 2005-12-20 15:33
回答、ありがとうございます。
上記の方法で対応できそうです。
子のフォームで「しばらくお待ちください。」というメッセージを出しています。
親画面ではループ処理をしています。
その間、子のフォームは表示されるのですが「しばらくお待ちください。」の文字が表示されません。このような場合はどのように対応すればよいでしょうか?
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2005-12-20 15:50
引用:

子のフォームで「しばらくお待ちください。」というメッセージを出しています。
親画面ではループ処理をしています。


私だったら、こういう場合は子フォームでループを回すことを考えますけどね。

ま、私はC#は知らんのでこの辺で。ノシ
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2005-12-20 15:59
引用:

子のフォームで「しばらくお待ちください。」というメッセージを出しています。
親画面ではループ処理をしています。
その間、子のフォームは表示されるのですが「しばらくお待ちください。」の文字が表示されません。


ループ処理中に子フォームがメッセージを受け取れず描画できないために起こります。
Label1.Text = "しばらくお待ちください"
Label1.Refresh
と強制的に描画してあげるとよいでしょう。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2005-12-20 16:05
引用:

まどかさんの書き込み (2005-12-20 15:59) より:
ループ処理中に子フォームがメッセージを受け取れず描画できないために起こります。
Label1.Text = "しばらくお待ちください"
Label1.Refresh
と強制的に描画してあげるとよいでしょう。


これでは無理じゃなかったですかね?
Updateなら強制描画できた気はしますが。
きっちりやりたいならもっとちゃんとやる必要があります。
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2005-12-20 16:08
引用:

私だったら、こういう場合は子フォームでループを回すことを考えますけどね。


よく考えにあがることですが、結果的にそうなった例は少ないなぁ。。
結局、事後論ではなくて、事前にその処理の性質やどこに所属するかによって
親から離してクラスライブラリにしたりと設計の問題でしょうね。
私の場合はその場合でも進捗表示専用として実装するでしょう。たぶん。
一体化するとメソッドで無くなりますし。
キラ
大ベテラン
会議室デビュー日: 2005/12/10
投稿数: 104
投稿日時: 2005-12-20 16:14
上記方法で解決できました。
助かりました、ありがとうございます。
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2005-12-20 16:26
引用:

引用:

Label1.Refresh
と強制的に描画してあげるとよいでしょう。


これでは無理じゃなかったですかね?
Updateなら強制描画できた気はしますが。


え?いままで描画できなかったことは無いんですが。
ちょっと不安になっちゃった。。。
「どぼんさん」
http://dobon.net/vb/dotnet/control/refreshupdateinvalidate.html

スキルアップ/キャリアアップ(JOB@IT)