タイトル | : [解決]SplitContainerでパネルの入替 |
記事No | : 7121 |
投稿日 | : 2008/03/04(Tue) 06:49 |
投稿者 | : ダンボ |
y4yamaさん、魔界の仮面弁士さん、どうもありがとうございます。 お二人の回答で自信を得て実装したら5分もかからずに実現できてしまいました。
> 見た目を維持したいのであれば、GroupBox ではなく、Panel を使ってみてください。 Me.SplitContainerFC.Panel1.Controls.Add(PanelOut) Me.SplitContainerFC.Panel2.Controls.Add(PanelIn) の2行を追加するだけでした。コードは。
> と並べるだけで、Removeはしなくても、Controlsの中の入れ替えは出来ましたが・・・ Me.SplitContainerFC.Panel1.Controls.Remove(PanelIn) Me.SplitContainerFC.Panel2.Controls.Remove(PanelOut) Me.SplitContainerFC.Panel1.Controls.Add(PanelOut) Me.SplitContainerFC.Panel2.Controls.Add(PanelIn) 本来はこう書くべきだと思うんですが。。。 ステップモードで確認するとy4yamaさんのおっしゃるとおり、 Me.SplitContainerFC.Panel1.Controls.Add(PanelOut)実行と同時に Me.SplitContainerFC.Panel2.ControlsからPanelOutが除かれていました。
ちょっと疑問の残る言語仕様です。そりゃコントロールが同時に複数の コントロール下にあるという事態は都合が悪いので、Add時に同時に暗黙に Removeしちゃうということなんでしょう。コーダーに断りも無く。
以下感想です。 1.SplitContainer便利です。今回の要望のようにInvertメソッドを 付け加えてくれるといいなぁ。 2.SplitContainer現状は2ペイン固定ですが、少なくとも3ペインは サポートして欲しいなぁ。よくあるパターンですもの。 3.Dock=Fill,Top,Bottom,Left,Right便利です。コードを書かずに デザイン時に指定するだけでよいので。 できればDock=Horizontal,Verticalも実装して欲しい。というのも 今回はパネル内に上からTextBox,DataGridView,StatusBarを隙間無く 配置したかったんです。TextBoxのDock=Top、StatusBarのDock=Bottom まではgoodなんですが、真ん中のDataGridViewについては結局コード を書くか、あるいはもうひとつSplitContainerを噛ませるしか無く。 4.造語を思いつきました。「コントロールスパゲッティ」 コードを楽にしたぶん、今度はコントロール管理が大変です。今回一番 深いのは、Form→SplitContainerMain→SplitContainerMain.Panel1 →SplitContainerFC→SplitContainerFC.Panel1→PanelIn →StatusBarIn→ToolStripButton→DropDownItems
|