【问题标题】:How do I know when the current system scrollbar width changed?我怎么知道当前系统滚动条宽度何时改变?
【发布时间】:2010-09-17 21:25:01
【问题描述】:
当滚动条的大小发生变化时,我需要移动控件 (System.Windows.Forms.SystemInformation.VerticalScrollBarWidth)。
我正在创建一个带有自定义滚动条的控件,该滚动条覆盖了普通滚动条。这意味着创建一个新的 UserControl(不继承内置控件)并使用面板来隐藏正常的滚动条。
自定义控件必须有一个大小合适的“外部”面板,这个面板包含一个比外部面板大的“内部”面板,因此滚动条不会出现。多大取决于System.Windows.Forms.SystemInformation.VerticalScrollBarWidth 和HorizontalScrollBarHeight,正如已经回答的那样。但是我必须知道当我的应用程序运行时这种情况是否会发生变化,这看起来不太可能。
这个问题与:
How do I know the current width of system scrollbar?
【问题讨论】:
标签:
c#
user-controls
scrollbar
【解决方案1】:
我目前正在尝试实现类似的目标。
我正在运行 Windows XP SP3,“经典”样式,并且在仅更改当前设计的滚动条宽度时,我对 OnSystemColorsChanged() 的覆盖(在从 Control 派生的类中)被调用了四次。
为什么是四次我真的不知道,我怀疑可能是因为那里有四个属性似乎取决于该设置:
SystemInformation.HorizontalScrollBarArrowWidth
SystemInformation.HorizontalScrollBarHeight
SystemInformation.VerticalScrollBarArrowHeight
SystemInformation.VerticalScrollBarWidth
但所有这些在第一次调用时都已经持有新值。所以我不是 100% 确定这里发生了什么。但看起来 OnSystemColourChanged() 应该被称为 OnSystemInformationChanged()。
希望这会有所帮助...
【解决方案2】:
一定要听Microsoft.Win32.SystemEvents.UserPreferenceChanged。
正如 takrl 提到的,OnSystemColorsChanged 被调用,但对我来说只有一次(Windows7,Framework 3.5)