2009-08-03 8 views
15

私はWindows Formsアプリケーション(.NET 2.0、VS 2005)を開発しています。含まれているコントロールが大きすぎるとスクロールバーをサイズ変更可能なパネルに表示するにはどうすればよいですか?

this.panel1.Dock=DockStyle.Fill; 

このパネルは、単にコンテナとして使用されている:私は、本質的に動的にフォームにリサイズされたパネルを含むフォームを持っています。実行時には、カスタムコントロールが追加されます。

UserControl uc=new UserControl(); 
panel1.Controls.Add(uc); 
uc.Dock=DockStyle.Fill; 

このカスタムコントロールは、最小サイズの要件を有しているので、私は全体のコントロールを表示するためには小さすぎるなれば含むパネルに表示されるようにスクロールバーをしたい:

this.panel1.AutoScroll=true; 

これは機能しません。 DockプロパティではなくAnchorプロパティを使用してパネルのサイズを変更しようとしましたが、無駄です。

答えて

24

ユーザーコントロールをドッキングしないでください。代わりにAnchorプロパティを使用します。 (4つの側面すべてにアンカー)。 設定しますユーザーコントロールののminimumSizeプロパティ あなたはそのAutoScrollMinSizeプロパティを設定しない限り

パネルのスクロールバーが表示されなくなりますパネルのAutoScrollMinSizeプロパティを設定します。ユーザーコントロールのDockをFillに設定すると、パネルのスクロールバーが非表示になります。

+10

AutoScrollMinSizeが設定されている限り、Dockプロパティはパネルとユーザーコントロールの両方で問題ありません(http://social.msdn.microsoft.com/Forums/ en-US/winforms/thread/56267eb1-25af-4df2-82a3-0498563c7eef)。 – Mac

+0

アンカーリングはドッキングと同じではありません。たとえば、ドッキングされたコントロールを非表示にすると、次のコントロールが自動的に並べ替えられます。アンカーはあなたにこの能力を与えません。ドッキングは非常に便利ですが、OPのように、ドッキングされたコントロールの最小サイズを設定していても、親オートスクロールコントロールを使用することで、常にうまくいくとは限りません – Gwynge

2

のInitializeComponentは、ダイアログ形式で、私はこれをしなかったし、動作するように見えた後:

tableLayoutPanel1.AutoScrollMinSize = tableLayoutPanel1.GetPreferredSize(new Size(1, 1)); 

私はテーブル内のサブパネルの束を持っています。すべての行と列がAutoSizeに設定されています。何らかの理由で、コントロールがスマートではないので、スクロールコントロールの優先サイズがわかります。

1

Panel.AutoScroll = * True works - NOW!私は上記のアイデアをパネルとユーザーコントロールの両方でプレイしてプレイし、最終的にはすべてをデフォルトに戻し、パネル上で自動スクロールを設定しました。何らかの形でそれが再び動作します...図形を参照してください...

関連する問題