【问题标题】: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.VerticalScrollBarWidthHorizontalScrollBarHeight,正如已经回答的那样。但是我必须知道当我的应用程序运行时这种情况是否会发生变化,这看起来不太可能。

这个问题与: 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)

      【讨论】:

        猜你喜欢
        • 2010-10-25
        • 2011-06-04
        • 2020-09-15
        • 2012-08-31
        • 1970-01-01
        • 1970-01-01
        • 2016-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多