Compartilhar via


ScaleControl chamado somente quando necessário

O dimensionamento geralmente é necessário somente quando um aplicativo está em execução no modo SystemAware ou PerMonitorV2 e o monitor tem configurações de DPI personalizadas que diferem do computador em que o aplicativo foi projetado. Nesses cenários, o runtime do Windows Forms calcula o fator de escala com base nas configurações de DPI personalizadas do monitor e chama ScaleControl(SizeF, BoundsSpecified) com o novo fator de escala. Para melhorar o desempenho, ScaleControl agora é chamado apenas quando o fator de escala calculado for algo diferente de 1.0F (ou seja, o dimensionamento é necessário). Essa alteração poderá interromper seu aplicativo se ele substituir ScaleControl e executar ações personalizadas na substituição.

Versão introduzida

Manutenção do .NET 6 6.0.101

Comportamento antigo

Na versão do .NET 6 GA e nas versões anteriores, a API ScaleControl(SizeF, BoundsSpecified) pública virtual era chamada sempre que PerformAutoScale() era chamado no controle de contêiner do aplicativo. Ou seja, o método era chamado sempre que houvesse uma alteração de layout ou fonte, independentemente de o dimensionamento ser necessário.

Novo comportamento

A partir das versões de manutenção do .NET 6, ScaleControl(SizeF, BoundsSpecified) é chamado somente quando há a necessidade de dimensionar o formulário ou controle. O runtime do Windows Forms calcula o fator de escala com base nas configurações de DPI personalizadas do monitor e nas configurações de DPI do monitor no qual o aplicativo foi projetado. ScaleControl(SizeF, BoundsSpecified) será chamado somente se o fator de escala indicar que o dimensionamento é necessário.

Categoria da alteração

Essa alteração afeta a compatibilidade de origem.

Motivo da alteração

Essa alteração foi feita para melhorar o desempenho e evitar layouts desnecessários.

Verifique se o código executa ações personalizadas e não dimensionáveis nesses métodos substituíveis.

APIs afetadas