【问题标题】:How to make scrollbars appear in a resizable panel when the contained control is too big for it?当包含的控件太大时,如何使滚动条出现在可调整大小的面板中?
【发布时间】:2009-08-03 14:58:39
【问题描述】:

我正在开发一个 Windows 窗体应用程序(.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;

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

【问题讨论】:

    标签: .net winforms user-controls scroll


    【解决方案1】:

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

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

    【讨论】:

    • Dock 属性适用于面板和用户控件,只要设置了 AutoScrollMinSize (social.msdn.microsoft.com/Forums/en-US/winforms/thread/…)。
    • 锚定与对接不同。例如,如果我使停靠的控件不可见,那么它会自动重新排列以下控件。锚定不会给你这种能力。停靠非常有用,但就像 OP 所说的那样,它并不总是像您希望的那样与父 Autoscroll 控件一起工作 - 即使在设置停靠控件的最小大小时也是如此
    【解决方案2】:

    在对话框表单中初始化组件之后,我这样做了,它似乎工作:

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

    我在表格中有一堆子面板。所有行和列都设置为 AutoSize。出于某种原因,控件不够智能告诉滚动控件它的首选大小。

    【讨论】:

      【解决方案3】:

      Panel.AutoScroll= *真正的作品 - 现在!对于面板和用户控件,我玩了又玩了上面的想法,最后将所有内容重置为默认值,在面板上设置自动滚动,然后......瞧!不知怎的,它又可以工作了...去想...

      【讨论】:

        猜你喜欢
        • 2012-05-07
        • 2020-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-20
        • 2011-10-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多