tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル [解決]SplitContainerでパネルの入替
投稿日: 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。