2011-09-27 9 views
9

私は折りたたみ可能なパネル要素を作成しています。これは基本的にボタン要素とボタンの下のパネル要素を持つパネル要素です。ボタンをクリックすると、隣のパネルはVisible = falseになります。子パネルが不可視に設定されている場合、包含パネルのサイズを変更したいと思います。ウィンドウに含まれる要素に合わせてパネルのサイズを変更します。

私は、目に見える要素の幅と高さの合計になるようにSizeプロパティを設定することで、手動でこれを行っている(いずれかのボタンまたはボタンと子パネル。)

を私は知って好奇心ただし、手動でSizeを呼び出さずに、収納パネルのサイズを強制的に変更する方法があれば可能です。

私は、要素のサイズに基づいて自動的に要素のサイズを変更するプロパティDock=Fillの逆を探していますね。

ありがとうございます。ことについて

+0

。 FlowLayoutPanelを使用して、クライアント領域内のパネルを自動的に調整することができますが、あなたがしていることは正しいと思います。 – mhttk

+0

誰もそれを見ることができないときにそれをサイズ変更するのは何ですか? –

+0

@Hans Passant:申し訳ありませんが、質問は面白く言われているかもしれません。 2つのパネルがあります。 1つは不可視になり、もう1つはボタンと不可視のパネルが含まれています。外側のパネルは内側のパネルが見えなくなったときに縮小する必要があります。そうでない場合は、折りたたまれていません。消えても、以前と同じスペースを占めています。私は、Visual Studio Forms Toolboxで展開したり折りたたんだりするときに "Common Controls"の部分が表示されている行に沿って何かをしようとしていました。 – user420667

答えて

8

方法:

panel1.Size = new Size(0, 0); 
panel1.AutoSize = true; 

をして、代わりの可視性を変更し、これを実行します。

panel1.Controls.Remove(panel2); 

、あなたはそれを取り戻すしたい:

panel1.Controls.Add(panel2); 

を(パネル1は背面パネル)

+1

素晴らしい考え。だからAutoSizeは私が探していたプロパティでした。唯一のことは、これに続いてpanel2.BringToFront()を実行するか、ドッキング順を外すことです。 – user420667

4

私はちょうどispiroによって与えられた答えを試みました。 しないでくださいコントロールを削除して追加する必要があります。設定はVisibleです。レイアウトをいつ実行するかによって異なります。 panel2がpanel1より前のレイアウトを実行すると、panel2のサイズは変更されません。簡単にするには、代わりに親のPerformLayoutを使用してください。

このように使われています:私はそれはそれだと思う

panel1.ResumeLayout(false); 
panel2.ResumeLayout(false); 
this.ResumeLayout(false); 
this.PerformLayout(); 
関連する問題