C # WinForms deaktiviert die DPI-Skalierung

8

Ich habe eine WinForm-Anwendung, die viele Bilder hostet. Wenn ich die Anwendung auf einen Win7-Rechner mit einer DPI von 120 setze, ruiniert es das Aussehen des Formulars komplett. Gibt es eine Möglichkeit, die Skalierung für mein Formular zu deaktivieren?

Mir ist bewusst, dass dies nicht empfohlen wird und dass DPI nahtlos und vom Betriebssystem gehandhabt werden sollte. Aber wenn es um eine Anwendung mit Skins geht, skalieren die Bilder nicht gut. Ich habe nicht den Luxus, Bilder für alle DPI-Varianten zu erstellen, also schlage das nicht als Antwort vor.

    
MarkP 24.10.2010, 16:32
quelle

3 Antworten

10

Sie haben größere Probleme, wenn Sie die AutoScaleMode-Eigenschaft ändern. Durch Erhöhen der DPI wird auch die Systemschriftgröße geändert. Notwendigerweise werden Schriftgrößen in Punkten ausgedrückt, 1/72 Zoll. Die Schriftarten müssen größer sein, um die gleiche Punktgröße zu erhalten, wenn der DPI-Wert zunimmt, und den Text bei gleicher Entfernung so gut lesbar halten.

Da die Steuerelemente nicht mehr in der Größe geändert werden, passt der Text auf, sagen wir, eine Schaltfläche nicht mehr. Eine Möglichkeit, dies zu bekämpfen, besteht darin, die Schriftgröße der Steuerelemente proportional zu ändern. Wenn Sie zulassen, dass alle Steuerelemente die Formularschriftart erben, ändert das Ändern der Schriftart-Eigenschaft des Formulars automatisch die Steuerelemente außerdem. Der deutliche Nachteil besteht darin, dass es dem Benutzer schwerer fällt, den Text zu lesen. Dies wird besonders schlimm, wenn die DPI auf 150 Punkte pro Zoll und darüber hinaus geht, wird Ihre UI einfach zu einer unbrauchbaren Briefmarke.

Ja, Hintergrundbilder müssen skaliert werden, damit sie zum größeren Steuerelement oder Formular passen. Ein Pixel im Bild wird nun nicht mehr eins zu eins einem Pixel des Monitors zugeordnet. Der Standardwert Graphics.InterpolationMode filtert das Bild ziemlich gut. Aber es hängt von der Art des Bildes ab, wie gut das herauskommt. Ein Foto skaliert fast immer sehr gut. Fein detaillierte Strichzeichnungen und Text nicht. Die richtige Art von Bild zu wählen, bedeutet einen langen Weg zu vermeiden, dass man separate erstellen muss.

Dieses Problem wird nicht verschwinden, bis die Monitore die Auflösung eines Druckers haben. Von 600 dpi für Desktop-Monitore sind wir noch weit entfernt. Telefone werden zuerst sein.

    
Hans Passant 24.10.2010, 18:48
quelle
3

Sie können die Eigenschaft AutoScaleMode des Formulars auf None setzen.

    
Jeff Ogata 24.10.2010 17:05
quelle
3

Das Hinzufügen einer Codezeile vor dem automatisch generierten Aufruf von InitializeComponent im Form1-Konstruktor löste es für mich:

%Vor%     
Helper 02.07.2014 11:24
quelle

Tags und Links