2010-09-17 78 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()。 希望這有助於...