Как узнать, когда изменилась текущая ширина полосы прокрутки системы? - PullRequest
1 голос
/ 18 сентября 2010

Мне нужно перемещать элементы управления при изменении размера полосы прокрутки (System.Windows.Forms.SystemInformation.VerticalScrollBarWidth).

Я создаю элемент управления с пользовательскими полосами прокрутки, которые идут поверх обычных. Это подразумевает создание нового UserControl (без наследования встроенного элемента управления) и использование панелей, чтобы скрыть обычные полосы прокрутки.

У пользовательского элемента управления должна быть одна «внешняя» панель правильного размера, в которой «внутренняя» панель больше, чем внешняя панель, поэтому полосы прокрутки не отображаются. Насколько больше зависит от System.Windows.Forms.SystemInformation.VerticalScrollBarWidth и HorizontalScrollBarHeight, как уже отвечали. Но тогда я должен знать, меняется ли это, когда мое приложение работает, настолько невероятно, насколько это кажется.

Этот вопрос связан с: Как узнать текущую ширину полосы прокрутки системы?

Ответы [ 2 ]

1 голос
/ 30 ноября 2010

Надо слушать Microsoft.Win32.SystemEvents.UserPreferenceChanged.Как упоминалось ранее, OnSystemColorsChanged вызывается, но только один раз для меня (Windows7, Framework 3.5)

1 голос
/ 25 ноября 2010

Я сейчас пытаюсь добиться чего-то похожего.

Я использую Windows XP SP3 в «классическом» стиле, и после изменения только ширины полосы прокрутки текущего дизайна мое переопределение OnSystemColorsChanged () (в классе, производном от Control) вызывается четыре раза.

Почему четыре раза я не знаю, я подозревал, что это может быть потому, что там есть четыре свойства, которые, кажется, зависят от этого параметра:

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

Но все они уже содержат новое значение во время первого вызова. Так что я не уверен на 100%, что здесь происходит. Но похоже, что OnSystemColourChanged () лучше назвать OnSystemInformationChanged (). Надеюсь, это поможет ...

...