Mise à l’échelle automatique (Windows Forms .NET)
La mise à l’échelle automatique permet à un formulaire et à ses contrôles, conçus sur un ordinateur avec une certaine résolution ou police d’affichage, d’être affichés de manière appropriée sur un autre ordinateur avec une autre résolution d’affichage ou une police différente. Elle garantit que le formulaire et ses contrôles seront redimensionnés intelligemment et de manière cohérente avec les fenêtres natives et d'autres applications sur les ordinateurs des utilisateurs et d'autres développeurs. La mise à l’échelle automatique et les styles visuels permettent aux applications Windows Forms de maintenir une apparence cohérente par rapport aux applications Windows natives sur l’ordinateur de chaque utilisateur.
Dans la plupart des cas, la mise à l’échelle automatique fonctionne comme prévu dans Windows Forms. Toutefois, les modifications apportées au schéma de police peuvent être problématiques.
Besoin de mise à l’échelle automatique
Sans mise à l'échelle automatique, une application conçue pour une résolution d'écran ou une police particulière apparaîtra trop petite ou trop grande en cas de modification de cette résolution ou police. Par exemple, si l'application est conçue à l'aide de la police Tahoma 9 points comme ligne de base, sans réglage elle apparaîtra trop petite si vous l'exécutez sur un ordinateur où la police système est Tahoma 12 points. Les éléments de texte (tels que les titres, les menus, le contenu des zones de texte et ainsi de suite) apparaîtront plus petits que dans les autres applications. En outre, la taille des éléments d'interface utilisateur qui contiennent du texte (comme la barre de titre, les menus et de nombreux contrôles) dépend de la police utilisée. Dans cet exemple, ces éléments apparaîtront aussi relativement plus petits.
Une situation analogue se produit quand une application est conçue pour une certaine résolution d'écran. La résolution d’affichage la plus courante est de 96 points par pouce (PPP), qui équivaut à une mise à l’échelle d’affichage de 100 %, mais une résolution supérieure prend en charge 125 %, 150 %, 200 % (respectivement 120, 144 et 192 PPP) et versions ultérieures sont de plus en plus courantes. Sans réglage, une application (en particulier basée sur des graphismes) conçue pour une résolution spécifique apparaîtra trop grande ou trop petite en cas d'exécution dans une autre résolution.
La mise à l’échelle automatique cherche à résoudre ces problèmes en redimensionnant automatiquement le formulaire et ses contrôles enfants en fonction de la taille de police relative ou de la résolution d’affichage. Le système d'exploitation Windows prend en charge la mise à l'échelle automatique des boîtes de dialogue à l'aide d'une unité de mesure relative appelée unité de boîte de dialogue. Une unité de boîte de dialogue est basée sur la police système et sa relation aux pixels peut être déterminée à l'aide de la fonction du SDK Win32 GetDialogBaseUnits
. Quand un utilisateur change le thème utilisé par Windows, toutes les boîtes de dialogue sont automatiquement ajustés en conséquence. De plus, Windows Forms prend en charge la mise à l’échelle automatique en fonction de la police système par défaut ou de la résolution d’affichage. Le cas échéant, la mise à l'échelle automatique peut être désactivée dans une application.
Attention
Les combinaisons arbitraires de modes de mise à l'échelle de police et PPP ne sont pas prises en charge. Bien que vous puissiez mettre à l'échelle un contrôle utilisateur à l'aide d'un mode (par exemple PPP) et le et placer sur un formulaire à l'aide d'un autre mode (Police) sans problème, le fait de combiner un formulaire de base dans un mode et un formulaire dérivé dans un autre peut produire des résultats inattendus.
Mise à l’échelle automatique en action
Windows Forms utilise la logique suivante pour mettre automatiquement à l’échelle les formulaires et leur contenu :
Au moment du design, chaque ContainerControl enregistre le mode de mise à l'échelle et sa résolution actuelle dans les propriétés AutoScaleMode et AutoScaleDimensions, respectivement.
Au moment de l’exécution, la résolution réelle est stockée dans la propriété CurrentAutoScaleDimensions. La propriété AutoScaleFactor calcule dynamiquement le rapport entre la résolution de mise à l’échelle au moment de l’exécution et au moment du design.
Quand le formulaire se charge, si les valeurs de CurrentAutoScaleDimensions et AutoScaleDimensions sont différentes, la méthode PerformAutoScale est appelée pour mettre à l'échelle le contrôle et ses enfants. Cette méthode suspend la disposition et appelle la méthode Scale pour effectuer la mise à l'échelle. Par la suite, la valeur de AutoScaleDimensions est mise à jour pour éviter la mise à l'échelle progressive.
PerformAutoScale est également appelée automatiquement dans les situations suivantes :
En réponse à l'événement OnFontChanged si le mode de mise à l'échelle est Font.
Quand la disposition du contrôle conteneur reprend et qu'une modification est détectée dans la propriété AutoScaleDimensions ou AutoScaleMode.
Comme expliqué ci-dessus, quand un ContainerControl parent est mis à l'échelle. Chaque contrôle conteneur est responsable de la mise à l'échelle de ses enfants à l'aide de ses propres facteurs d'échelle, et non de celui de son conteneur parent.
Les contrôles enfants peuvent modifier leur comportement de mise à l'échelle de plusieurs manières :
La propriété ScaleChildren peut être substituée pour déterminer si leurs contrôles enfants doivent être mis à l'échelle ou non.
La méthode GetScaledBounds peut être substituée pour ajuster les limites de mise à l'échelle du contrôle, mais pas la logique de mise à l'échelle.
La méthode ScaleControl peut être substituée pour modifier la logique de mise à l'échelle pour le contrôle actuel.
Voir aussi
.NET Desktop feedback