【问题标题】:Scrollable Form in c#, AutoScroll=true doesn't workc# 中的可滚动表单,AutoScroll=true 不起作用
【发布时间】:2013-07-22 13:44:50
【问题描述】:

要使表单可滚动,我必须遵守哪些规则...

我简单地将属性AutoScroll 设置为true。 我还尝试在Auto Scroll 为真时将AutoSize 设置为真/假,但这些都不起作用...还尝试将面板放入其中并添加所有组件...仍然没有...

也许使用V or HScrollBar 会有所帮助,但我真的不知道如何将它与表单链接...

form.AutoScroll = true;
formMainLayout.AutoScroll = true;
rootPanel.AutoScroll = true;

【问题讨论】:

  • 您的子控件从表单中隐藏?
  • “子控件”从表单中隐藏是什么意思?如果你是这个意思,form有这个Controls.Add:rootPanel,rootPanel有formMainLayout,formMainLayout有所有其他Controls
  • 我的意思是如果您的表单大小是 (200,200)。您的任何子控件是否存在超出此范围?(超过 200,200)
  • 你必须给它一个显示滚动条的理由。让它更小。

标签: c# forms scroll


【解决方案1】:

我也遇到了同样的问题,已经解决了。。。 面板内的所有子控件都有一个 LeftRight 锚点,当我只将锚点设置为 Top 时,滚动条可以正常工作。

我不确定为什么(子控件的)LeftRight 锚点会强制面板不显示滚动条。

但无论如何......希望这对截至目前的任何人都有帮助。

【讨论】:

    【解决方案2】:

    内容控制滚动。除非需要,否则不会出现滚动条。通常,您可以设置一个可用属性以强制它们始终可见,并在需要时简单地禁用。

    AutoScroll 属性必须是 true,正如您已经找到的那样。但随后可滚动控件的内容必须强制父控件显示滚动条。这部分取决于控件如何嵌入到父级中。

    试试这两个实验:

    1. 在您的表单上放置一个Panel 并将其停靠到Fill。将面板的AutoScroll 属性设置为true。在该面板中,放置一个TextBox 并将其设置为停靠为Fill。还将MultiLine 设置为true。运行应用程序,您会注意到两者的大小只是在使用可用空间...不会发生滚动,因为Panel 和它的TextBox 都不会大于它们占用的空间。

    2. 执行与 #1 相同的步骤,但这次不要对接 TextBox。相反,将其设置为较大的大小,您知道该大小将大于可见的Panel 的数量。运行应用程序现在应该会产生一个滚动的Panel

    希望这个小测试有助于演示是什么控制了表单上的滚动。

    【讨论】:

    • 抱歉,我不确定您所说的“表单本身不是可滚动控件”是什么意思。该表单与任何其他控件一样可滚动:自动滚动 + 满足条件(包含边界外的控件)或其中的 vscrollbar/hscrollbar。另外,我不太确定您所说的回答“为什么当我将 AutoScroll 设置为 true 时我看不到栏?”的实际/直接适用性。
    • @varocarbas 你的观点很好。我已经删除了我的答案的那部分。关于您评论的后半部分,这是我试图回答的问题:“我必须遵守哪些规则才能使表单可滚动”。
    • 我将根面板设置为 Dock -> None... 看起来不错,但问题是我希望某些控件使用表单的所有可用大小,而某些按钮保持高度静态和宽度以使用所有可用的表单宽度...到目前为止,我使用 Dock -> Fill ... 实现了它
    • 不过,谢谢它以某种方式帮助了我,我不得不尝试大小和填充
    【解决方案3】:

    AutoScroll 属性应该可以正常工作,但很可能您没有正确使用它:该栏仅在需要时出现。示例:Form 的最小 Y 为 0,其中一个控件(TextBox)的最小 Y 为 -20。

    如果您想在任何情况下都包含滚动条(控件是否位于表单边界内),您也可以这样做。垂直滚动条的示例代码 (from MSDN):

    // Create and initialize a VScrollBar.
    VScrollBar vScrollBar1 = new VScrollBar();
    
    // Dock the scroll bar to the right side of the form.
    vScrollBar1.Dock = DockStyle.Right;
    
    // Add the scroll bar to the form.
    Controls.Add(vScrollBar1);
    

    【讨论】:

      【解决方案4】:

      您需要设置父面板的属性。

      1. 停靠 = 填充
      2. 锚点 = 顶部,左侧
      3. 自动滚动 = 真

      就是这样。祝你好运! ^^

      【讨论】:

        【解决方案5】:

        注意垂直滚动

        1. 打开表单的自动滚动属性。插入一个面板和 将面板宽度设置为表单宽度和面板高度 等于您的总内容的长度,或者可能是 1300 或 1500 必填。

        2. 根据需要放置面板位置设置面板锚点 属性到顶部。把你的一切 面板内的内容。

        希望它能解决你的问题

        【讨论】:

          【解决方案6】:

          我遇到了同样的问题。

          您只需添加以下内容:

          this.AdjustFormScrollbars(true);

          【讨论】:

          • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
          猜你喜欢
          • 1970-01-01
          • 2015-12-01
          • 2023-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-24
          相关资源
          最近更新 更多