2010-09-17 126 views
1

当滚动条的大小发生变化时(System.Windows.Forms.SystemInformation.VerticalScrollBarWidth),我需要移动控件。如何知道当前系统滚动条宽度更改的时间?

我创建了一个控制自定义滚动条,超过正常的。这意味着创建一个新的UserControl(不是继承一个内置控件),并使用面板来隐藏正常的滚动条。

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

这个问题是涉及到: How do I know the current width of system scrollbar?

回答

1

必须听Microsoft.Win32.SystemEvents.UserPreferenceChanged。 由于takrl提到,OnSystemColorsChanged被调用,但对我来说只有一次(Windows7,Framework 3.5)

1

我目前正试图实现类似的东西。我正在运行Windows XP SP3,“经典”风格,并且当改变当前设计的滚动条宽度时,我的OnSystemColorsChanged()(在派生自Control的类中)的重写被调用四次。

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

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

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