Beheben von HDPI-/Skalierungsproblemen mit dem Windows Forms-Designer in Visual Studio
In diesem Artikel erfahren Sie, wie Sie Renderingprobleme aufgrund von Skalierungseinschränkungen des Windows Forms-Designers auf HDPI-Monitoren durch das Ausführen von Visual Studio als nicht DPI-fähigen Prozess beheben. HDPI steht für „High Dots per Inch“, wobei jeder Punkt ein physisches Gerätepixel darstellt.
Eine höhere Pixeldichte erzeugt schärfere Bilder, und die Anzeigeskalierung dimensioniert Elemente ordnungsgemäß. Ohne korrekte Skalierung sind die Elemente der Benutzeroberfläche (UI) und der Text zu klein, um sie effektiv zu verwenden. Zudem können sie sich überlappen. Um dieses Problem zu beheben, skaliert Windows automatisch die Perzentile der Benutzeroberfläche, um sie an die DPI-Einstellung anzupassen. Eine DPI-Einstellung von 100 % entspricht z. B. 96 DPI und 125 % entspricht 120 DPI. Monitore wurden früher mit 96 Pixeln pro Zoll ausgeliefert. Windows nutzte dies als Basis für Bitmapzeichnungen mit 100 %. Da sich die Anzeigetechnologie jedoch weiterentwickelt hat, werden Monitore jetzt mit Panels mit mindestens 300 DPI ausgeliefert.
Wenn sich eine Anwendung als „DPI-fähig“ erklärt, bedeutet dies, dass sich die App bei höheren DPI-Einstellungen entsprechend verhält, sodass Windows eine automatische Skalierung vornehmen kann. Im Gegensatz dazu rendern Anwendungen, die „nicht DPI-fähig“ sind, mit einem festen DPI-Wert von 96 Pixeln pro Zoll oder 100 %, sodass die automatische Skalierung nicht angewendet wird.
Windows Forms-Designer ist nicht DPI-fähig
Hinweis
In Visual Studio 2022, Version 17.8 oder höher, können Sie die in diesem Artikel beschriebenen Probleme vermeiden. Visual Studio 2022, Version 17.8, bietet Unterstützung für nicht bekannte Registerkarten mit DPI-Werten in einer DPI-fähigen Anwendung. Weitere Informationen finden Sie unter DPI-Verbesserungen in Visual Studio. Auf diese Weise können Sie Windows Forms für Nicht-DPI-Kontexte entwerfen, ohne dass Sie Visual Studio im Nicht-DPI-Modus ausführen müssen. Wenn Sie diese Einstellung in einem Windows Forms-Projekt verwenden möchten, legen Sie die Eigenschaft ForceDesignerDPIUnaware
in der Projektdatei auf true
fest:
<PropertyGroup>
...
<ForceDesignerDPIUnaware>true</ForceDesignerDPIUnaware>
</PropertyGroup>
Visual Studio ist standardmäßig eine DPI-fähige Anwendung (Dots per Inch), d. h. die Anzeige wird automatisch skaliert. Der Windows Forms-Designer ist jedoch eine nicht DPI-fähige App und wird als Bitmap mit 96 DPI angezeigt. Ohne Unterstützung der automatischen Skalierung treten Probleme und Überlappungen auf, wenn Formulare auf HDPI-Monitoren geöffnet werden. Dies ist in der folgenden Abbildung dargestellt:
Wenn Sie ein Formular im Windows Forms-Designer auf einem HDPI-Monitor öffnen, zeigt Visual Studio eine Infoleiste mit dem aktuellen Skalierungsprozentsatz des Monitors (z. B. 150 %/144 DPI), einer Option zum Neustarten von Visual Studio mit einer Skalierung von 100 % entsprechend dem Windows Forms-Designer sowie weiteren Informationen an. Durch einen Neustart bei einer Skalierung von 100 % ist VS nicht mehr DPI-fähig, sodass ein ordnungsgemäßes Rendering ohne Überlappung möglich ist.
Tipp
- Wenn Sie die Informationsleiste geschlossen haben und Visual Studio als nicht DPI-fähig neu starten möchten, verwenden Sie das Tool DevEnv.exe.
- Wenn Sie nicht im Designer arbeiten, können Sie die Infoleiste ignorieren. Sie können auch Benachrichtigungen deaktivieren, sodass die Infoleiste nicht mehr angezeigt wird.
Neustarten von Visual Studio als nicht DPI-fähigen Prozess
Die empfohlene Lösung zum Beheben dieser Probleme mit der Benutzeroberfläche besteht darin, Visual Studio als nicht DPI-fähigen Prozess neu zu starten, was bedeutet, dass es bei einer Skalierung von 100 % (96 DPI) neu gestartet wird.
So wechseln Sie zu nicht DPI-fähig:
- Wählen Sie die Option „Visual Studio mit Skalierung von 100 % neu starten“ auf der gelben Informationsleiste aus, die angezeigt wird, wenn Sie ein Formular in Windows Forms-Designer öffnen.
Es ist wichtig, dass Visual Studio zur Standardeinstellung als DPI-fähiger Prozess zurückkehrt, wenn Sie die Arbeit im Windows Forms-Designer abgeschlossen haben.
So kehren Sie zu DPI-fähig zurück:
- Schließen Sie Visual Studio, und öffnen Sie es erneut, um wieder zu DPI-fähig zu wechseln. Alternativ können Sie auch die Option Neustarten von Visual Studio als DPI-fähiger Prozess in der Informationsleiste auswählen.
Wenn Visual Studio als nicht DPI-fähiger Prozess ausgeführt wird, werden die Probleme mit dem Designerlayout behoben. Allerdings können Schriftarten verschwommen erscheinen, und es können Probleme in anderen Designern wie dem XAML-Designer auftreten. Visual Studio zeigt eine andere Informationsmeldung an, wenn die Ausführung als nicht DPI-fähiger Prozess erfolgt: „Visual Studio wird als nicht DPI-fähiger Prozess ausgeführt. WPF- und XAML-Designer werden möglicherweise nicht ordnungsgemäß angezeigt.“
Hinweis
- Wenn Sie Toolfenster abgedockt hatten, nachdem Sie die Option zum Neustarten von Visual Studio als nicht DPI-fähiger Prozess ausgewählt haben, kann sich die Position dieser Toolfenster ändern.
- Wenn Sie das Visual Basic-Standardprofil verwenden oder Sie die Option Neue Projekte beim Erstellen speichern unter Extras>Optionen>Projekte und Projektmappen deaktiviert haben, kann Visual Studio Ihr Projekt nicht erneut öffnen, wenn die Anwendung als nicht DPI-fähiger Prozess neu gestartet wird. Allerdings können Sie das Projekt öffnen, indem Sie es unterDatei>Zuletzt verwendete Projekte und Projektmappen auswählen.
Hinweis
- Wenn Sie Toolfenster abdocken, nachdem Sie die Option zum Neustarten von Visual Studio als nicht DPI-fähiger Prozess ausgewählt haben, kann sich die Position dieser Toolfenster ändern.
- Das Standardprofil von Visual Basic öffnet Projekte nicht erneut, wenn Visual Studio als nicht DPI-fähiger Prozess neu gestartet wird. Greifen Sie stattdessen über Datei>Zuletzt verwendete Projekte und Projektmappen auf Ihr Projekt zu.
Verwenden von Windows zum Festlegen der Anzeigeskalierung auf 100 %
Wenn Sie nicht Visual Studio zum Umschalten der Anzeigeskalierung verwenden möchten, passen Sie die Skalierung in den Windows-Einstellungen an. Unter Windows 11 können Sie die Skalierung beispielsweise auf 100 % (96 DPI) festlegen.
Geben Sie dazu Anzeigeeinstellungen in das Suchfeld der Taskleiste ein, und wählen Sie dann Anzeigeeinstellungen ändern aus. Legen Sie im Fenster Einstellungen die Option Größe von Text, Apps und anderen Elementen ändern auf 100 % fest. Beachten Sie, dass die Benutzeroberfläche bei einer Skalierung von 100 % (96 DPI) für die praktische Verwendung zu klein werden kann.
Deaktivieren der Skalierung mithilfe des DevEnv-Befehlszeilentools
Um Ihre Anzeigeeinstellungen mithilfe von Befehlszeilentools anstelle der Benutzeroberflächentools zu verwalten, verwenden Sie DevEnv.exe. Der Befehl devenv.exe
benötigt /noscale
als Befehlszeilenparameter, um im Skalierungsmodus von 100 % ausgeführt zu werden. Hier erfahren Sie, wie Sie ihn verwenden:
- Wählen Sie hierfür Extras>Befehlszeile>Developer-Eingabeaufforderung in der Menüleiste von Visual Studio aus.
- Geben Sie dann
devenv /noScale
ein.
Weitere Optionen
Zusätzlich zu den oben genannten Optionen können Sie auch die folgenden ausprobieren:
Die Option auswählen Rendering für Bildschirme mit unterschiedlichen Pixeldichten optimieren (Neustart erforderlich).
Deaktivieren von Skalierungsbenachrichtigungen in Visual Studio, wenn Sie z. B. nicht in einem Designer arbeiten. So deaktivieren Sie Benachrichtigungen
- Wählen Sie in der Menüleiste Extras>Optionen aus, um das Dialogfeld Optionen zu öffnen.
- Wählen Sie im Dialogfeld Optionen die Optionen Windows Forms-Designer>Allgemein aus, und legen Sie DPI-Skalierungsbenachrichtigungen auf FALSE fest.
Problembehandlung
Wenn der Übergang der DPI-Fähigkeit in Visual Studio nicht funktioniert, stellen Sie sicher, dass der Wert dpiAwareness
NICHT im Unterschlüssel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\devenv.exe des Registrierungs-Editors vorhanden ist. Löschen Sie den Wert, wenn dieser vorhanden ist.