当滚动条的大小发生变化(System.Windows.Forms.SystemInformation.VerticalScrollBarWidth
)时,我需要移动控件。
我正在创建一个自定义滚动条的控件,它超越了正常的滚动条。这意味着创建一个新的UserControl(不继承内置控件)并使用面板进行游戏以隐藏正常的滚动条。
自定义控件必须有一个尺寸合适的“外部”面板,这个面板包含一个比外部面板大的“内部”面板,因此滚动条不会出现。多大程度取决于已经回答的System.Windows.Forms.SystemInformation.VerticalScrollBarWidth
和HorizontalScrollBarHeight
。但是,当我的应用程序运行时,我必须知道这是否会发生变化,这似乎是不可能的。
这个问题与以下内容有关: How do I know the current width of system scrollbar?
答案 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)