【问题标题】:autoscroll panel to bottom自动滚动面板到底部
【发布时间】:2021-08-28 11:03:31
【问题描述】:

我的 winforms 中有一个面板,我在其中加载了一些用户控件。

我想在每次添加新的用户控件时自动滚动到面板底部(当我的面板填充时)。我该怎么做?

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    您可以通过设置面板的VerticalScroll 来做到这一点,但我认为改用ScrollControlIntoView 会更好。

    private void panel1_ControlAdded(object sender, ControlEventArgs e)
    {
        panel1.ScrollControlIntoView(e.Control);
    }
    

    祝你好运!

    【讨论】:

    • 这似乎工作......我发现奇怪的一件事是,虽然面板中的其他控件相应地向上移动,但作为滚动面板的子级的 TableLayoutPanel 不会向上移动。您必须在滚动后以编程方式手动移动它们。奇数。
    【解决方案2】:

    您可以使用ScrollControlIntoView 并传递您上次添加的控件。

    另一种解决方案是:

    panel.VerticalScroll.Value = panel.VerticalScroll.Maximum
    

    【讨论】:

    • 任何尝试此解决方案的人如果遇到滚动条不更新的问题,您需要在设置 Value 后调用 PerformLayout()。此处确认的问题和解决方案:stackoverflow.com/questions/5565653/…
    • 注意,如果您动态添加用户控件,您还必须手动更新 panel.VerticalScroll.Maximum 的值。
    【解决方案3】:

    我发现每当用户向上或向下滚动面板时,以垂直增量连续向面板添加控件会受到负面影响。我使用了上面 Homam 的提示,发现以下方法效果很好:

    panel1.VerticalScroll.Value = 0;
    
    // Creating and adding a TextBox, tb, to the panel
    
    panel1.ScrollControlIntoView(tb);
    

    首先,我滚动到顶部以便为我的文本框使用绝对垂直位置,然后我放置文本框,最后,我确保新创建的文本框出现在视图中。

    【讨论】:

      猜你喜欢
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      相关资源
      最近更新 更多