„ScaleControl“ wird nur bei Bedarf aufgerufen
Die Skalierung ist normalerweise nur erforderlich, wenn eine Anwendung im SystemAware- oder PerMonitorV2-Modus ausgeführt wird und der Monitor benutzerdefinierte DPI-Einstellungen aufweist, die sich von denjenigen des Computers unterscheiden, auf dem die App entworfen wurde. In diesen Szenarien berechnet die Windows Forms-Runtime den Skalierungsfaktor basierend auf den benutzerdefinierten DPI-Einstellungen des Monitors und ruft ScaleControl(SizeF, BoundsSpecified) mit dem neuen Skalierungsfaktor auf. Um die Leistung zu verbessern, wird ScaleControl
jetzt nur aufgerufen, wenn der berechnete Skalierungsfaktor ein anderer Wert als „1.0F“ ist (d. h. Skalierung erforderlich). Diese Änderung kann Ihre Anwendung beschädigen, wenn sie ScaleControl
außer Kraft setzt und bei der Außerkraftsetzung benutzerdefinierte Aktionen ausführt.
Eingeführt in Version
.NET 6 Wartungsrelease 6.0.101
Altes Verhalten
Im .NET 6 GA-Release und früheren Versionen wurde die virtuelle, öffentliche API ScaleControl(SizeF, BoundsSpecified) bei jedem Aufruf von PerformAutoScale() im Containersteuerelement der Anwendung aufgerufen. Das heißt, die Methode wurde jedes Mal aufgerufen, wenn ein Layout oder eine Schriftart geändert wurde, unabhängig davon, ob eine Skalierung erforderlich war.
Neues Verhalten
Seit den .NET 6-Wartungsversionen wird ScaleControl(SizeF, BoundsSpecified) nur aufgerufen, wenn das Formular oder Steuerelement skaliert werden muss. Die Windows Forms-Runtime berechnet den Skalierungsfaktor basierend auf den benutzerdefinierten DPI-Einstellungen des Monitors und den DPI-Einstellungen des Monitors, auf dem die Anwendung entworfen wurde. ScaleControl(SizeF, BoundsSpecified) wird nur aufgerufen, wenn der Skalierungsfaktor angibt, dass eine Skalierung erforderlich ist.
Ändern der Kategorie
Diese Änderung kann sich auf die Quellkompatibilität auswirken.
Grund für die Änderung
Diese Änderung wurde vorgenommen, um die Leistung zu verbessern und unnötige Layouts zu vermeiden.
Empfohlene Maßnahme
Überprüfen Sie, ob Ihr Code benutzerdefinierte Aktionen ohne Skalierung in diesen überschreibbaren Methoden ausführt.