必要な場合にのみ、ScaleControl が呼び出されました

スケーリングは、通常、アプリケーションが SystemAware モードまたは PerMonitorV2 モードで実行されており、アプリの設計に使用したコンピューターとは異なるカスタム DPI 設定がモニターで実行されている場合にのみ必要です。 これらのシナリオでは、Windows フォームのランタイムによって、モニターのカスタム DPI 設定に基づき、スケール ファクターが計算され、新しいスケール ファクターで ScaleControl(SizeF, BoundsSpecified) が呼び出されます。 パフォーマンスの向上を目的に、計算されたスケール ファクターが 1.0F 以外 (つまり、スケーリングが必要) の場合にのみ、ScaleControl が呼び出されるようになりました。 この変更によって ScaleControl がオーバーライドされ、このオーバーライドでカスタム アクションが実行される場合は、アプリが中断する可能性があります。

導入されたバージョン

.NET 6 サービス 6.0.101

以前の動作

.NET 6 GA リリース以前のバージョンでは、アプリケーションのコンテナー コントロールで PerformAutoScale() が呼び出されるたびに、仮想パブリック API ScaleControl(SizeF, BoundsSpecified) が呼び出されていました。 つまり、スケーリングが必要かどうかに関係なく、レイアウトやフォントが変更されるたびに、メソッドが呼び出されていました。

新しい動作

.NET 6 サービス リリース以降、フォームまたはコントロールのスケーリングが必要な場合にのみ、ScaleControl(SizeF, BoundsSpecified) が呼び出されています。 モニターのカスタム DPI 設定およびアプリケーションの設計に使用したモニターの DPI 設定に基づき、Windows フォームのランタイムによって、スケール ファクターが計算されます。 スケーリングが必要であることをスケール ファクターが示している場合にのみ、ScaleControl(SizeF, BoundsSpecified) が呼び出されます。

カテゴリの変更

この変更は、"ソースの互換性" に影響します。

変更理由

この変更は、パフォーマンスの向上と不要なレイアウトの回避を目的に行われました。

オーバーライド可能な方法で、カスタムの、スケーリング以外のアクションがコードによって実行されているかどうかを確認してください。

影響を受ける API