- - PR -
モーダル、モードレスの制御
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-06-19 13:21
こんにちは。
いきなりですが、C#でのモーダル、モードレスの制御について困っています。 ■やりたいこと FormA,FormB,FormCがあります。 @FormAからFormBをモードレスで開く AFormAからFormCをモーダルで開く 上記条件の時に、FormAはもちろん触れなくて良いのですが、FormCだけでなくFormBも触れるようにしたいです。 ※FormB,FormCはFormAからの起動しかできないのが前提条件です。 よろしくお願い致します。 | ||||
|
投稿日時: 2008-06-19 14:07
ちなみに、、
@ AからCをモーダルで開く A CからBをモードレスで開く 上記の場合はB,Cどちらとも操作できます。 当たり前のように思いますが、おもしろい結果です。 投稿時の条件と同じフォームが開いているのに、結果が変わる。 ということは、どこかにフォームの管理をしているところがあるはずなんですが それがみつからない。。。 できると思ってたんですが、やはり無理なんでしょうかね。。。 | ||||
|
投稿日時: 2008-06-19 14:28
> どこかにフォームの管理をしているところがある
Showメソッド、ShowDialogメソッド共に、「所有者側フォーム」を引数として持たせることができるオーバーロードがあります。 引数無しの場合は、勝手に呼び出し側(現在アクティブになっているフォーム)が所有者になります。 そのため、 > @ AからCをモーダルで開く > A CからBをモードレスで開く どれも引数無しのメソッドを使用した場合、 Cの所有者はA、Bの所有者はCとなります。 BがAに触れられないのは、BにとってAは何の関連もないためです。 「モードレス」は飽くまで所有されてる側(子供)と所有してる側(親)の間を行き来する ことができる状態を指します。 | ||||
|
投稿日時: 2008-06-20 11:29
こんにちは。ぴんふです。
FormBもFormCもモードレスで開いて、FormCだけ擬似モードレスにするとかはどうですか? 実装例としては 1.FormBもFormCもモードレスで開く 2.FormCのActivatedイベントでFormAの全コントロールのEnabledをfalseにする 3.FormCのClose直前にFormAの全コントロールのEnabledをtrueにする 4.FormCのActivatedイベントでFormAの全コントロールのEnabledをtrueにする なんか無理やりですけど一応それっぽくはなります。 FormAの制御クラスでも作っておけば実用にも耐えられる・・・かも? 追記 すみません。 FormCが二重で開かれないような制御も必要ですね。 [ メッセージ編集済み 編集者: ぴんふ 編集日時 2008-06-20 11:46 ] |
1