DOBON.NET DOBON.NETプログラミング掲示板過去ログ

クラスからのダイアログ表示

環境/言語:[win2000 VB.NET]
分類:[.NET]

クラスにてタイマースレッドを起動して、タイマー処理にてフォームをShowDialog表示しています。しかし、フォームがモーダルで表示されません。

すみませんがご教授願います。
> クラスにてタイマースレッドを起動して、タイマー処理にてフォームをShowDialog表示しています。しかし、フォームがモーダルで表示されません。

いいえ。きっとモーダルで表示されているはずですよ。
そのタイマースレッドとやらから見れば。

Windows のウィンドウはスレッドに所属するものなので、ワーカースレッドでモーダルにフォームを表示したとしても、プライマリスレッドが所有するフォームに対してモーダルになることはありません。
こんにちは、じゃんぬねっと です。

■No9923に返信(タカさんの記事)
> クラスにてタイマースレッドを起動して、タイマー処理にてフォームをShowDialog表示しています。
> しかし、フォームがモーダルで表示されません。

スレッドが違うのですから当たり前だと思います。

参考リンク
http://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=26916
渋木宏明(ひどり) さん、じゃんぬねっとさん、回答ありがとうございます!
そうですか・・・やはり私のやり方では親子関係(?)がないからダメなんですね。

続いて質問で申し訳ないのですが。
私の様なやり方で、既に表示されているフォームに対してモーダル表示する事は可能でしょうか?ご教授お願い致します。
2005/03/19(Sat) 17:37:09 編集(投稿者)
2005/03/19(Sat) 17:36:54 編集(投稿者)

> そうですか・・・やはり私のやり方では親子関係(?)がないからダメなんですね。

親子関係ではなく、スレッドが異なることが最大の原因です。
親子関係を問う以前に「家計が違う」とでも言えばいいのかな?

> 私の様なやり方で、既に表示されているフォームに対してモーダル表示する事は可能でしょうか?ご教授お願い致します。

どういう動作が欲しいのかで対応は異なります。

ワーカースレッドがメッセージボックスを表示するタイミングで、ワーカースレッド、プライマリスレッドともにブロックしてもいいなら、ワーカースレッドからプライマリスレッドが保有するフォームのメソッドを Invoke して、プライマリスレッドにメッセージボックスの表示を依頼する形をとります。

DOBON.NET | プログラミング道 | プログラミング掲示板