„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.

Überprüfen Sie, ob Ihr Code benutzerdefinierte Aktionen ohne Skalierung in diesen überschreibbaren Methoden ausführt.

Betroffene APIs