WinForms:如何使用AutoScroll避免水平滚动条?

时间:2011-03-04 18:50:06

标签: c# .net winforms compact-framework autoscroll

我正在编写一个自定义控件,其中包含一个项目列表(子控件),这些项目可以水平调整大小以适应控件的宽度。如果有很多项目(或者控件调整大小使其垂直不够高),则需要垂直滚动条;但是当出现垂直滚动条时,子控件突然太宽,导致出现水平滚动条。

如果我手动控制控件放置(不依赖于AnchorStyles),保证在不需要时不显示水平滚动条的正确方法是什么? (注意:我无法手动控制VScroll属性,因为我在Compact Framework上;如果项目的最小宽度比客户区域宽,那么将合法地需要水平滚动条。)

2 个答案:

答案 0 :(得分:2)

在计算子控件的所需宽度时,请考虑垂直滚动条的宽度:

System.Windows.Forms.SystemInformation.VerticalScrollBarWidth

答案 1 :(得分:2)

我在类似情况下所做的是每次我在列表中添加项目后检测到滚动条是否可见并手动调整宽度。

我在检测滚动条是否显示时所做的是:

  1. 通过WS_VSCROLL通过P / Invoke在控件上设置GetWindowLong()的测试。
  2. 扫描控件的子项以获取垂直滚动条控件。
  3. 这取决于控件如何处理滚动条以确定哪一个是正确的。

    这也是在Windows上,而不是在CF中,所以我不确定这是否会以完全相同的方式工作。