- PR -

モーダル、モードレスの制御

1
投稿者投稿内容
KEN
会議室デビュー日: 2008/06/19
投稿数: 2
投稿日時: 2008-06-19 13:21
こんにちは。
いきなりですが、C#でのモーダル、モードレスの制御について困っています。

■やりたいこと
FormA,FormB,FormCがあります。
@FormAからFormBをモードレスで開く
AFormAからFormCをモーダルで開く

上記条件の時に、FormAはもちろん触れなくて良いのですが、FormCだけでなくFormBも触れるようにしたいです。
※FormB,FormCはFormAからの起動しかできないのが前提条件です。

よろしくお願い致します。
KEN
会議室デビュー日: 2008/06/19
投稿数: 2
投稿日時: 2008-06-19 14:07
ちなみに、、

@ AからCをモーダルで開く
A CからBをモードレスで開く

上記の場合はB,Cどちらとも操作できます。
当たり前のように思いますが、おもしろい結果です。

投稿時の条件と同じフォームが開いているのに、結果が変わる。
ということは、どこかにフォームの管理をしているところがあるはずなんですが
それがみつからない。。。
できると思ってたんですが、やはり無理なんでしょうかね。。。
カドルドエグ
常連さん
会議室デビュー日: 2008/05/29
投稿数: 25
投稿日時: 2008-06-19 14:28
> どこかにフォームの管理をしているところがある
Showメソッド、ShowDialogメソッド共に、「所有者側フォーム」を引数として持たせることができるオーバーロードがあります。

引数無しの場合は、勝手に呼び出し側(現在アクティブになっているフォーム)が所有者になります。
そのため、

> @ AからCをモーダルで開く
> A CからBをモードレスで開く

どれも引数無しのメソッドを使用した場合、
Cの所有者はA、Bの所有者はCとなります。
BがAに触れられないのは、BにとってAは何の関連もないためです。
「モードレス」は飽くまで所有されてる側(子供)と所有してる側(親)の間を行き来する
ことができる状態を指します。
ぴんふ
ベテラン
会議室デビュー日: 2006/07/13
投稿数: 80
投稿日時: 2008-06-20 11:29
こんにちは。ぴんふです。
引用:

■やりたいこと
FormA,FormB,FormCがあります。
@FormAからFormBをモードレスで開く
AFormAからFormCをモーダルで開く



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

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