C# Winforms - 控件的滚动条何时初始化?

Posted

技术标签:

【中文标题】C# Winforms - 控件的滚动条何时初始化?【英文标题】:C# Winforms - When are scrollbars for a Control initialized? 【发布时间】:2011-07-30 21:08:52 【问题描述】:

情况如下:

我正在尝试从 devexpress 控件 VerticalScroll 控制 flowLayoutControl 的滚动条。

现在 - 带有 autoscroll = true 的 flowLayoutControl。我添加了一个新的垂直滚动控件并将其停靠在右侧。所以现在 Devexpress Vertical Scroll 控件就在 FlowLayout 滚动条的顶部。

运行以下代码时,FlowLayoutPanel 垂直滚动也不会隐藏:

    spotWinFlowLayout1.VerticalScroll.Visible = false

我已经设置了以下事件处理程序:

    private void spotWinFlowLayout1_Resize(object sender, EventArgs e)
    
        SetupVerticalScrollBar();
            

    private void SetupVerticalScrollBar()
    
        vScrollBar1.Minimum = spotWinFlowLayout1.VerticalScroll.Minimum;
        vScrollBar1.Maximum = spotWinFlowLayout1.VerticalScroll.Maximum;
        vScrollBar1.LargeChange = spotWinFlowLayout1.VerticalScroll.LargeChange;
        vScrollBar1.SmallChange = spotWinFlowLayout1.VerticalScroll.SmallChange;            
    

    private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
    
        spotWinFlowLayout1.VerticalScroll.Value = e.NewValue;
    

一切正常,除了在表单加载时 flowLayoutControl 上已经有一个滚动条, spotWinFlowLayout1.VerticalScroll.XXX 属性尚未设置。所以两个滚动条都不同步。但只要我调整表单大小,两者都会同步。

那么 FlowLayoutPanel 的滚动条何时初始化?

【问题讨论】:

【参考方案1】:

所以滚动条是什么时候 FlowLayoutPanel 初始化了吗?

这听起来像是一个 smartalec 的回答:“当控件被绘制或放置在表单上时”这就是你调整表单大小时它们同步的原因。(它们是又被画了)

解决办法是自己手动添加滚动条。

【讨论】:

最初设置控件的 visible = false ,然后将 formLoad 设置为 true 即可解决问题。感谢您的提示。 @Aseem - 我很高兴能帮助我几年前在课堂上实际上被分配做这样的事情。它涉及在有足够的内容滚动时解锁滚动条。

以上是关于C# Winforms - 控件的滚动条何时初始化?的主要内容,如果未能解决你的问题,请参考以下文章

C# Winforms:没有 AutoScroll 的滚动条

如何在我的 winforms 应用程序中设置我的 datagrid 滚动条的位置?

请问:C# listView控件如何判断滚动条的位置?判断滚动条在控件的最下面?

WinForms 中的 C# 虚拟列表视图

c# WebBrowser 控件滚动条

如何阻止 Winforms 面板滚动?