如何知道当前系统滚动条宽度何时更改?

时间:2010-09-17 21:25:02

标签: c# user-controls scrollbar

当滚动条的大小发生变化(System.Windows.Forms.SystemInformation.VerticalScrollBarWidth)时,我需要移动控件。

我正在创建一个自定义滚动条的控件,它超越了正常的滚动条。这意味着创建一个新的UserControl(不继承内置控件)并使用面板进行游戏以隐藏正常的滚动条。

自定义控件必须有一个尺寸合适的“外部”面板,这个面板包含一个比外部面板大的“内部”面板,因此滚动条不会出现。多大程度取决于已经回答的System.Windows.Forms.SystemInformation.VerticalScrollBarWidthHorizontalScrollBarHeight。但是,当我的应用程序运行时,我必须知道这是否会发生变化,这似乎是不可能的。

这个问题与以下内容有关: How do I know the current width of system scrollbar?

2 个答案:

答案 0 :(得分:1)

我目前正在努力实现类似的目标。

我正在运行Windows XP SP3,“经典”风格,并且只更改当前设计的滚动条宽度,我的OnSystemColorsChanged()(在从Control派生的类中)的重写被调用四次。

为什么这是我不知道的四次,我怀疑这可能是因为那里的四个属性似乎取决于该设置:

SystemInformation.HorizontalScrollBarArrowWidth
SystemInformation.HorizontalScrollBarHeight
SystemInformation.VerticalScrollBarArrowHeight
SystemInformation.VerticalScrollBarWidth

但所有这些在第一次通话时已经保留了新值。所以我不是100%肯定这里发生了什么。但看起来OnSystemColourChanged()应该被称为OnSystemInformationChanged()。 希望这会有所帮助...

答案 1 :(得分:1)

必须听取Microsoft.Win32.SystemEvents.UserPreferenceChanged。 正如takrl所提到的那样,OnSystemColorsChanged被调用,但对我来说只有一次(Windows7,Framework 3.5)