Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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’afficher correctement sur un autre ordinateur avec une autre résolution ou police d’affichage. Les formulaires et les contrôles sont redimensionnés intelligemment pour rester cohérents avec les fenêtres natives et d’autres applications sur les machines des utilisateurs et d’autres développeurs. La mise à l'échelle automatique et les styles visuels aident Windows Forms applications à maintenir une apparence cohérente par rapport aux applications natives Windows 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. Pour obtenir un exemple de résolution de ce problème, consultez Comment : répondre aux modifications apportées au schéma de police dans une application Windows Forms.
Prise en charge des DPI dans .NET
La prise en charge de la résolution PPP est configurée dans le fichier de projet à l’aide de la propriété ApplicationHighDpiMode, qui est définie sur SystemAware par défaut. Cette configuration s’intègre au mécanisme d’initialisation de l’application pour configurer automatiquement la gestion des DPI au lancement de votre application.
Le mode PPP par défaut et recommandé pour les applications Windows Forms est SystemAware. Ce mode interroge le paramètre PPP une fois au démarrage de l’application et utilise cette valeur tout au long de la durée de vie de l’application, ce qui offre un comportement de mise à l’échelle cohérent.
Configurez le mode DPI dans votre fichier de projet :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ApplicationHighDpiMode>SystemAware</ApplicationHighDpiMode>
</PropertyGroup>
</Project>
Note
Bien que l’approche recommandée soit de configurer le DPI dans le fichier de projet, vous pouvez toujours utiliser un fichier manifeste d’application (app.manifest) pour redéfinir ces paramètres. Toutefois, l’utilisation du manifeste est déconseillée, car elle peut entraîner des conflits avec la configuration de l’application. Pour plus d’informations, consultez l’avertissement du compilateur WFO0003.
Considérations relatives au concepteur Visual Studio
Lorsque vous concevez des formulaires dans Visual Studio, vous devrez peut-être configurer la gestion du DPI du concepteur indépendamment de votre application. À partir de Visual Studio 2022 version 17.8, vous pouvez définir la propriété ForceDesignerDPIUnaware dans votre fichier de projet afin que le concepteur Windows Forms s’exécute en mode non compatible PPP. Ce paramètre permet d’éviter les problèmes de rendu lors de la conception de formulaires sur des moniteurs haute résolution :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ForceDesignerDPIUnaware>true</ForceDesignerDPIUnaware>
</PropertyGroup>
</Project>
Cette propriété affecte uniquement le concepteur Visual Studio et ne modifie pas la façon dont votre application s'exécute. Pour plus d’informations, consultez Désactiver la prise en charge du paramètre PPP pour résoudre les problèmes de mise à l’échelle.
Les modes DPI disponibles sont les suivants :
-
SystemAware—L’application récupère le DPI une fois au démarrage et utilise cette valeur pendant toute la durée de vie de l’application. -
PerMonitor—L’application vérifie les changements de DPI pour chaque moniteur et effectue une nouvelle mise à l’échelle lorsque le DPI change. -
PerMonitorV2— Similaire àPerMonitor, mais active les notifications de modification de ppp de fenêtre enfant et améliore le comportement de mise à l’échelle. -
DpiUnaware—L’application ne s’adapte pas aux changements de DPI, et Windows gère la mise à l’échelle. -
DpiUnawareGdiScaled— Similaire àDpiUnawaremais offre une meilleure qualité pour le contenu basé sur GDI.
Pour plus d'informations sur la configuration des paramètres DPI, consultez Nouveautés de Windows Forms pour .NET 6.
Besoin de mise à l’échelle automatique
Sans mise à l’échelle automatique, une application conçue pour une résolution d’affichage ou une police apparaît trop petite ou trop grande lorsque cette résolution ou cette police change. Par exemple, si vous concevez une application à l’aide de Tahoma 9 point comme base de référence, sans ajustement, elle apparaît trop petite lorsqu’elle est exécutée sur un ordinateur où la police système est Tahoma 12 point. Les éléments de texte, tels que les titres, les menus et le contenu des zones de texte, s’affichent en plus petit que dans d’autres applications. En outre, la taille des éléments d’interface utilisateur qui contiennent du texte, tels que la barre de titre, les menus et de nombreux contrôles, dépendent de la police utilisée. Dans cet exemple, ces éléments apparaissent également relativement plus petits.
Une situation analogue se produit lorsque vous concevez une application pour une certaine résolution d’affichage. La résolution d’affichage la plus courante est de 96 points par pouce (PPP), ce qui correspond à une mise à l’échelle de l’affichage de 100 %, mais les écrans à plus haute résolution prenant en charge des mises à l’échelle de 125 %, 150 %, 200 % (correspondant respectivement à 120, 144 et 192 PPP) et davantage sont de plus en plus courants. Sans ajustement, une application, en particulier une application basée sur des graphiques, conçue pour une résolution apparaît trop grande ou trop petite lors de l’exécution à une autre résolution.
La mise à l’échelle automatique résout 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é relative de mesures appelée unités de dialogue. Une unité de dialogue est basée sur la police système et sa relation avec les pixels peut être déterminée par le biais de la fonction GetDialogBaseUnitssdk Win32 . Lorsqu’un utilisateur modifie le thème utilisé par Windows, toutes les boîtes de dialogue s’ajustent automatiquement en conséquence. 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. Si vous le souhaitez, vous pouvez désactiver la mise à l’échelle automatique dans une application.
Avertissement
Les mélanges arbitraires de modes DPI et de mise à l’échelle des polices ne sont pas pris 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 :
Lors de la conception, 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 CurrentAutoScaleDimensions propriété. La AutoScaleFactor propriété calcule dynamiquement le rapport entre l’exécution et la résolution de mise à l’échelle 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 Scale méthode pour effectuer la mise à l’échelle réelle. Par la suite, la valeur de AutoScaleDimensions est mise à jour pour éviter une mise à l’échelle cumulative.
PerformAutoScale est également appelé automatiquement dans les situations suivantes :
En réponse à l'événement OnFontChanged si le mode de mise à l'échelle est Font.
Lorsque la disposition du contrôle conteneur reprend et qu'une modification est détectée dans les propriétés AutoScaleDimensions ou AutoScaleMode.
Lorsqu’un élément parent ContainerControl 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 :
Remplacez la ScaleChildren propriété pour déterminer si leurs contrôles enfants doivent être mis à l’échelle.
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.
Remplacez la ScaleControl méthode pour modifier la logique de mise à l’échelle du contrôle actuel.
Améliorations pour les écrans à haute résolution (DPI)
.NET inclut des améliorations significatives du rendu DPI élevé, en particulier avec PerMonitorV2 le mode :
- Compatibilité DPI par moniteur—Les applications s’ajustent dynamiquement lorsqu’elles sont déplacées entre des moniteurs ayant des paramètres DPI différents.
- Comportement de mise à l’échelle amélioré — Les contrôles sont correctement mis à l’échelle lors d’un changement de DPI, y compris les contrôles imbriqués et les contrôles conteneurs (.NET 6+).
- Mise à l’échelle des tailles de formulaire etMaximumSizeMinimumSize mise à l’échelle des propriétés en fonction des paramètres DPI actuels du moniteur (.NET 7+, activés par défaut dans .NET 8+).
-
Événements de changement de DPI — De nouveaux événements vous permettent de gérer de manière programmatique les changements dynamiques de DPI :
- DpiChanged—Se déclenche lorsque le paramètre DPI change sur le périphérique d’affichage où le formulaire est actuellement affiché.
- DpiChangedBeforeParent—Se déclenche lorsque le paramètre DPI d’un contrôle est modifié par programmation avant qu’un événement de modification du DPI ne se produise pour son contrôle parent ou son formulaire.
- DpiChangedAfterParent—Se déclenche lorsque le paramètre DPI d’un contrôle est modifié par programmation après qu’un événement de modification du DPI s’est produit pour son contrôle parent ou son formulaire.
Pour plus d'informations sur les améliorations de la prise en charge des PPP élevés, consultez Nouveautés de Windows Forms pour .NET 6, Nouveautés de Windows Forms pour .NET 7 et Nouveautés de Windows Forms pour .NET 8.
différences entre .NET Framework
.NET Framework et .NET gérer la prise en charge des PPP différemment :
- Dans .NET Framework, configurez la reconnaissance du paramètre PPP à l’aide d’un fichier app.config avec l’élément
<System.Windows.Forms.ApplicationConfigurationSection>. - Dans .NET, configurer la reconnaissance du DPI via le fichier projet à l’aide de la propriété
ApplicationHighDpiMode. - .NET Framework utilise des fichiers manifestes pour la configuration DPI, ce qui n’est plus recommandé.
- .NET offre un meilleur comportement de mise à l’échelle et une gestion des modifications DPI plus fiable.
Pour plus d’informations sur la configuration PPP du .NET Framework, consultez Prise en charge des PPP élevés dans Windows Forms.
Voir aussi
.NET Desktop feedback