Skalierung von WinForms

TresPuntos

Cadet 4th Year
Registriert
Juni 2018
Beiträge
113
Hallo,

für meine fertige Anwendung ist mir ein Fehler aufgefallen. Ich habe eine feste Größe festgelegt, die man nicht ändern kann. Als ich die Anwendung auf einem anderen Notebook testen wollte, war die Größe der Anwendung viel zu groß für diesen Bildschirm, wegen dessen Bildschirmauflösung.
Deshalb meine Frage, wie kann man die WinForms skalieren, sodass die größe der Anwendung auf allen Bildschirmen "gleich" groß ist. Also das die Anwendungen bei allen Bildschirmauflösungen voll zu sehen ist.
 
Zumindest in google finde ich lösungen um WindowsForms so schreiben kann das sie mit der Auflösung skalieren.
Meinst du das? Schon probiert?
 
Wow ein sehr guter Tipp.

Habs schon gemacht, aber nicht wirklich weiter gewusst, weils bei mir nicht geklappt hat.

Bevor solche Antworten kommen, sollte man es lieber sein lassen.
 
Warum schreibst du nicht einfach hin was du schon probiert hast?
Gibt genügend Leute unfähig sind zu googeln und die Dinge mal zu testen.
 
Habe bisher den Autoscalemode von Font auf Dpi geändert und meine Bildschirmauflösung geändert (auch mein Notebook neugestartet, damit alle Apps die Auflösung übernehmen) -> dass Ganze hat leider nicht geklappt
 
Die Autoscalemode bezieht sich auf die Windows-Skalierung und funktioniert dort nicht sonderlich gut. Lediglich mit Windows 10 kann man Glück haben, dass alles einigermaßen gut aussieht.

Wenn du deine Form beispielsweise in 1920x1080 baust und auf 1280x768 anzeigen willst, hast du leider Pech - 1000L Wasser passen auch nicht in eine durchschnittliche Badewanne :D

Du musst deine Anwendung schon selber so gestalten, dass du sie kleiner ziehen kannst. Eine Alternative für diesen Fall gibt es meines Wissens nach nicht.
 
Oder eben bei der Festlegung der Mindestgrösse auch andere Displaygrössen und -formate berücksichtigen. Kann schon mal etwas in Arbeit ausarten, funktioniert aber durchaus.
 
Danke für die Hilfen

SomeDifferent schrieb:
Wenn du deine Form beispielsweise in 1920x1080 baust und auf 1280x768 anzeigen willst, hast du leider Pech - 1000L Wasser passen auch nicht in eine durchschnittliche Badewanne :D
Hatte eher daran gedacht, dass sich alle Items der Winform verkleinern/vergrößern.
Anwendungen, wie Visual Studio etc. skalieren sich auch an die Bildschirmauflösung die man besitzt. So im Prinzip sollte es funktionieren. Sprich die sollen sozusagen wie bei Webanwendungen "responsiv" sein.


areiland schrieb:
Oder eben bei der Festlegung der Mindestgrösse auch andere Displaygrössen und -formate berücksichtigen. Kann schon mal etwas in Arbeit ausarten, funktioniert aber durchaus.
Das wäre vermutlich die letzte Möglichkeit
 
TresPuntos schrieb:
Anwendungen, wie Visual Studio etc. skalieren sich auch an die Bildschirmauflösung die man besitzt. So im Prinzip sollte es funktionieren. Sprich die sollen sozusagen wie bei Webanwendungen "responsiv" sein.

Da kannst du dir aber sicher sein, dass die Designer/Entwickler dort einiges an Arbeit reingesteckt haben um dies zu realisieren.

Deine Frage war, ob sich deine fertige Anwendung irgendwie nachträglich auf andere Auflösungen herunter/heraufrechnen kann - nein. Das musst du im Entwicklungsprozess berücksichtigen.
Das responsive Verhalten, wie du es von Webseiten kennst, kannst du komplett vergessen. Da ist WinForms im Standard nicht fähig zu. Darum müsstest du dich selber kümmern.
 
  • Gefällt mir
Reaktionen: areiland
Ist gar nicht so schwer selbst ohne fertige Lösungen. Hab ich auch schon mal gebaut. Einfach auf Windows size change reagieren und für jedes enthaltene Control über einen definierten #-Satz die Größe und Position ausrechnen. Font nicht vergessen.
 
@Faust2011 Ich habe es einmal bei einer Anwendung ausprobiert und seit dem nicht wieder benutzt. Hab bisher noch keine Bedarf bezüglich DPI-awareness. Der Test sah aber ganz brauchbar aus. Jedenfalls besser als ohne.
 
  • Gefällt mir
Reaktionen: areiland
Ich hab mir jetzt auch mal DPIAwareness aktiviert und werde mal testen wie es sich damit verhält. Allerdings hatte ich ja auch schon ohne DPIAwareness auf Auflösungen von 1280x800 - 1920x1080 durchgehend das erwartete Ergebnis einer immer passenden Skalierung. Ich bin mit der Mindestgrösse einfach deutlich unter der kleinsten Auflösung geblieben. Allerdings lasse ich das Fenster auch nicht vergrössern und hab auch die Maximalgrösse entsprechend festgelegt. Aber auch wenn ich die Maximalgrösse freigebe, hat es mit meinen Einstellungen bisher immer gut gepasst.
 
Diese Problematik ist übrigens auch mit ein Grund, warum viele Entwickler für das Frontend immer öfter auf Webtechnologien zurück greifen.

Wir haben hier auch noch eine Anwendung im Einsatz, dessen GUI für 1024 * 768 optimiert ist.
Mittlerweile haben die Monitore, Skalierung hin oder her, jedoch viel höhere (Anzeige-)Auflösungen und die Anwendung ist vielen Anwendern dadurch zu klein geworden.
Skalieren lässt sich die Anwendung jedoch nicht, ohne alle alten GUIs neu zu gestalten. Das würde sehr viel Aufwand bedeuten das jetzt für Full-HD zu optimieren, also wird es Zug um Zug durch Webfrontends ersetzt. Dadurch entfällt dann auch, dass man die Anwendung in zwei, drei Jahren dann für 4K Monitore anpassen muss usw. Browser verhalten sich da einfach viel kompatibler, man kann einfach rein und rauszoomen, wenn einen etwas zu klein ist. Die Zugänglichkeit / Barrierefreiheit ist viel besser umsetzbar usw.
 
  • Gefällt mir
Reaktionen: TresPuntos
Danke für die ganzen Antworten.
Ich habe mich jetzt dazu entschieden die Anwendung kleiner zu gestalte, um so den höheren Auflösungen entgegen zu kommen.

Hatte die Hoffnung das Visual Studio dieses Problem "leichter" umsetzbar gemacht hat.
 
Eine Lösung wäre doch abzureifen welche Bildschirmauflösung gerade ist, und die Elemente entsprechend zu dimensionieren? Ähnlich wie bei CSS mit mobilen Geräten. Das sollte wohl der einfachste Weg sein für dein vorhaben.

Ich habe so etwas ähnliches bereits beim Ändern der Fenstergröße umgesetzt, weil es so "gewünscht" war. Natürlich muss die Anordnung der Elemente das auch hergeben... (Es wird einfach die bestehende Fenstergröße während der gestarteten Anwendung verändert)
 
Zurück
Oben