2010-09-17 6 views
1

Je dois déplacer les contrôles lorsque la taille de la barre de défilement change (System.Windows.Forms.SystemInformation.VerticalScrollBarWidth).Comment savoir si la largeur de la barre de défilement du système actuel a changé?

Je crée un contrôle avec des barres de défilement personnalisées qui dépassent les normales. Cela implique de créer un nouveau UserControl (sans hériter d'un contrôle intégré) et de jouer avec des panneaux de façon à masquer les barres de défilement normales.

Le contrôle personnalisé doit avoir un panneau "extérieur" à la bonne taille, celui-ci contenant un panneau "intérieur" plus grand que le panneau externe, de sorte que les barres de défilement n'apparaissent pas. Combien de plus dépend de System.Windows.Forms.SystemInformation.VerticalScrollBarWidth et HorizontalScrollBarHeight comme déjà répondu. Mais alors je dois savoir si cela change lorsque mon application est en cours d'exécution, aussi improbable que cela puisse paraître.

Cette question est liée à: How do I know the current width of system scrollbar?

Répondre

1

Il faut écouter Microsoft.Win32.SystemEvents.UserPreferenceChanged. Comme takrl mentionné, OnSystemColorsChanged est appelé, mais une seule fois pour moi (Windows7, Framework 3.5)

1

J'essaie actuellement d'obtenir quelque chose de similaire. Je suis sous Windows XP SP3, style "Classic", et en changeant juste la largeur de la barre de défilement de la conception actuelle, mon override de OnSystemColorsChanged() (dans une classe dérivée de Control) est appelé quatre fois.

Pourquoi il est quatre fois je ne sais pas vraiment, je me doutais qu'il pourrait être parce qu'il ya quatre propriétés là-dedans qui semblent dépendre de ce paramètre:

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

Mais tous ces détiennent déjà la nouvelle valeur au moment du premier appel. Donc je ne suis pas sûr à 100% de ce qui se passe ici. Mais il semble que OnSystemColourChanged() devrait plutôt s'appeler OnSystemInformationChanged(). Espérons que cela aide ...

Questions connexes