112 votes

Comment configurer une application pour qu'elle fonctionne correctement sur une machine avec un réglage DPI élevé (par exemple 150%) ?

J'ai créé une application Winforms simple en C#. Lorsque je lance l'application sur une machine avec des paramètres DPI élevés (par exemple 150%), l'application est mise à l'échelle. Jusqu'ici, tout va bien ! Mais au lieu de rendre les polices avec une taille de police plus élevée, tous les textes sont également mis à l'échelle. Cela conduit bien sûr à un texte très flou (sur tous les contrôles comme les boutons, etc.).

Windows ne devrait-il pas se charger de rendre les textes correctement ? Par exemple, la barre de titre de mon application est rendue de manière claire et nette.

0voto

gridtrak Points 586

Ce n'est pas une réponse. Il s'agit de ma méthode de travail. Aucune des réponses ou commentaires ci-dessus n'a fonctionné pour moi. J'ai également cherché et essayé d'autres méthodes.

J'utilise Visual Studio.NET avec C# et Windows.Forms depuis sa sortie initiale. Jusqu'à VS 2022 et Windows 11 cette année, le réglage du mode d'échelle semblait fonctionner correctement. Pour une raison quelconque, un peu de de mes valeurs Form.Height sont réduites au moment de l'exécution. Aucun problème jusqu'à présent avec la modification de Form.Width. Pour moi, ce problème a commencé le 1er avril 2022 - j'ai donc d'abord pensé qu'il s'agissait d'un poisson d'avril !

Quoi qu'il en soit, j'ai renoncé à essayer solutions pour l'instant et j'ai décidé qu'il était plus pratique pour moi de simplement définir la taille du formulaire dans le code du constructeur.

J'observe que le Designer UI utilise Taille qu'il convertit en ClientSize dans son code généré comme suit :

  this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
  this.ClientSize = new System.Drawing.Size(744, 109);
  this.ControlBox = false;
  this.DoubleBuffered = true;
  this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
  this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;

Ma solution de contournement dans le constructeur de mon formulaire ressemble à ceci :

/// <summary>
/// Constructor
/// </summary>
public MyForm()
{
  // In the designer, MyForm.Size was entered and displayed as 760, 148
  InitializeComponent();

  // At runtime, MyForm.Size is changed to 760, 111
  // I will Reset this form's Size here so I can get full height again.
  this.Size = new Size(760, 148);
}

Plate-forme :

  • Windows 11 Professionnel
  • Microsoft Visual Studio Professional 2022
  • Version 17.1.6
  • VisualStudio.17.Release/17.1.6+32421.90
  • Microsoft .NET Framework version 4.8.04161
  • C# Tools 4.1.0-5.22165.10+e555772db77ca828b02b4bd547c318387f11d01f
  • Vidéo HDMI 1920x1080 (100% ou pas de mise à l'échelle)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X