- - PR -
フォームの継承設計で接合PanelのDockプロパティの関係を変更したい
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-06-15 13:45
VS.NET2003 C#, Windowsアプリ
例えば、上位クラスのForm1でパネルとスプリッタの配置とDockプロパティの設定を Panel1 : Top Splitter1 : Top Panel2 : Fill としてフォームのサイズを変更した場合にはPanel2側で変更分を吸収できるようにします。 しかし、Form1を継承して開発したフォームでこの関係をPanel1とPanel2の間で次のように入れ替えたくなることがあります。 Panel1 : Fill Splitter1 : Bottom Panel2 : Bottom でも、レイアウトはデザイナが記述するControls.Add()の順序が関係するためにこのような希望は実現できないようなのですが、何かうまいアイデアをお持ちの方はいらっしゃいませんか? 全部動的配置で作れと言われればそれまでなのですが、Delphiではこんなことは簡単にできていましたので何か技はあるだろうとお尋ねする次第です。よろしくお願いします。 |
|
投稿日時: 2005-06-15 13:58
各コントロールのBringToFrontメソッドや、
フォームのControlsプロパティで取得できるControlCollectionオブジェクトのSetChildIndexメソッドを使用することでZオーダーを変更可能です。 継承先からと言うことなら、通常コントロールはpritvateで隠蔽されているはずですから 継承元にprotectedな取得専用プロパティでも作るかしなければなりませんが。 //派生先が位置を変えたいと思う時点で派生先から隠蔽する意義は失われているでしょうし。 |
|
投稿日時: 2005-06-15 13:58
継承先で必要な Dock プロパティを設定した後、 Panel1.SendToBack() を実行すれば
いいのかな? かぶった… 「やりたいこと」から推測すると、多分 protected にはしているんでしょう。 [ メッセージ編集済み 編集者: にしざき 編集日時 2005-06-15 14:01 ] |
|
投稿日時: 2005-06-15 14:14
Hongliangさん、にしざきさん、早速にありがとうございました。
Controls.Add()の順序を変えるということはZオーダーを変更するということだったんですね。おっしゃるとおりでうまくいきました。聞いてみるもんですね。 |
1