关于.net:当包含的控件太大时,如何使滚动条显示在可调整大小的面板中?

How to make scrollbars appear in a resizable panel when the contained control is too big for it?

我正在开发Windows窗体应用程序(.NET 2.0,VS 2005)。 我有一个表单,该表单本质上包含一个使用以下表单动态调整大小的面板:

1
this.panel1.Dock=DockStyle.Fill;

该面板仅用作容器。 在运行时,将添加一个自定义控件:

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

由于此自定义控件具有最小尺寸要求,因此,如果滚动条太小而无法显示整个控件,则希望滚动条显示在包含面板上:

1
this.panel1.AutoScroll=true;

这是行不通的。 我试图使用Anchor属性而不是Dock属性来调整面板大小,但无济于事。


不要停靠您的用户控件。 请改用Anchor属性。 (锚定到所有四个方面)。
设置用户控件的MinimumSize属性
设置面板的AutoScrollMinSize属性

除非设置面板的AutoScrollMinSize属性,否则面板的滚动条不会出现。 将用户控件的Dock设置为Fill似乎会隐藏面板的滚动条。


在对话框形式的InitializeComponent之后,我做到了,它似乎起作用了:

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

我桌上有一堆子面板。 所有行和列均设置为AutoSize。 由于某种原因,该控件不够智能,告诉滚动控件其首选大小。


Panel.AutoScroll = *真有效-现在! 我在面板和用户控制上都玩了上面的想法,最后将所有内容重置为默认值,在面板上设置了"自动滚动",然后……瞧! 不知何故它再次起作用...去想一下...