Dimensionamento automático (Windows Forms .NET)
O dimensionamento automático permite que um formulário e seus controles, projetados em uma máquina com uma determinada resolução de exibição ou fonte, sejam exibidos adequadamente em outra máquina com uma resolução de exibição ou fonte diferente. Ele garante que o formulário e seus controles serão redimensionados de forma inteligente para serem consistentes com janelas nativas e outros aplicativos nas máquinas dos usuários e de outros desenvolvedores. O dimensionamento automático e os estilos visuais permitem que os aplicativos do Windows Forms mantenham uma aparência consistente quando comparados aos aplicativos nativos do Windows no computador de cada usuário.
Na maioria das vezes, o dimensionamento automático funciona conforme o esperado no Windows Forms. No entanto, as alterações no esquema de fontes podem ser problemáticas.
Necessidade de dimensionamento automático
Sem o dimensionamento automático, um aplicativo projetado para uma resolução de exibição ou fonte parecerá muito pequeno ou muito grande quando essa resolução ou fonte for alterada. Por exemplo, se o aplicativo for projetado usando Tahoma 9 pontos como linha de base, sem ajuste, ele parecerá muito pequeno se executado em uma máquina em que a fonte do sistema seja Tahoma 12 pontos. Elementos de texto, como títulos, menus, conteúdo da caixa de texto e assim por diante, serão renderizados menores do que outros aplicativos. Além disso, o tamanho dos elementos da interface do usuário que contêm texto, como a barra de título, menus e muitos controles, depende da fonte usada. Neste exemplo, esses elementos também aparecerão relativamente menores.
Uma situação análoga ocorre quando um aplicativo é projetado para uma determinada resolução de exibição. A resolução de tela mais comum é de 96 pontos por polegada (DPI), o que equivale a 100% de escala de exibição, mas telas de resolução mais alta com suporte a 125%, 150%, 200% (que equivalem respectivamente a 120, 144 e 192 DPI) e acima estão se tornando mais comuns. Sem ajuste, um aplicativo, especialmente um baseado em gráficos, projetado para uma resolução parecerá muito grande ou muito pequeno quando executado em outra resolução.
O dimensionamento automático procura resolver esses problemas redimensionando automaticamente o formulário e seus controles filho de acordo com o tamanho relativo da fonte ou a resolução da tela. O sistema operacional Windows oferece suporte ao dimensionamento automático de caixas de diálogo usando uma unidade de medida relativa chamada unidades de diálogo. Uma unidade de diálogo é baseada na fonte do sistema e sua relação com os pixels pode ser determinada por meio da função GetDialogBaseUnits
SDK do Win32. Quando um usuário altera o tema usado pelo Windows, todas as caixas de diálogo são ajustadas automaticamente de acordo. Além disso, o Windows Forms dá suporte ao dimensionamento automático de acordo com a fonte padrão do sistema ou a resolução de exibição. Opcionalmente, o dimensionamento automático pode ser desativado em um aplicativo.
Cuidado
Não há suporte para misturas arbitrárias de modos de DPI e dimensionamento de fonte. Embora você possa dimensionar um controle de usuário usando um modo (por exemplo, DPI) e colocá-lo em um formulário usando outro modo (Fonte) sem problemas, mas misturar um formulário base em um modo e um formulário derivado em outro pode levar a resultados inesperados.
Dimensionamento automático em ação
O Windows Forms usa a seguinte lógica para dimensionar automaticamente formulários e seu conteúdo:
Em tempo de design, cada um ContainerControl registra o modo de dimensionamento e sua resolução atual em e AutoScaleMode AutoScaleDimensions, respectivamente.
Em tempo de execução, a resolução real é armazenada CurrentAutoScaleDimensions na propriedade. A AutoScaleFactor propriedade calcula dinamicamente a proporção entre a resolução de dimensionamento em tempo de execução e em tempo de design.
Quando o formulário é carregado, se os valores de CurrentAutoScaleDimensions e AutoScaleDimensions forem diferentes, o PerformAutoScale método é chamado para dimensionar o controle e seus filhos. Esse método suspende o layout e chama o Scale método para executar o dimensionamento real. Posteriormente, o valor de AutoScaleDimensions é atualizado para evitar o dimensionamento progressivo.
PerformAutoScale também é invocado automaticamente nas seguintes situações:
Em resposta ao evento, OnFontChanged se o modo de dimensionamento for Font.
Quando o layout do controle de contêiner é retomado e uma alteração é detectada nas AutoScaleDimensions propriedades or AutoScaleMode .
Como implícito acima, quando um pai ContainerControl está sendo dimensionado. Cada controle de contêiner é responsável por dimensionar seus filhos usando seus próprios fatores de dimensionamento e não o de seu contêiner pai.
Os controles filho podem modificar seu comportamento de dimensionamento por vários meios:
A ScaleChildren propriedade pode ser substituída para determinar se seus controles filho devem ser dimensionados ou não.
O GetScaledBounds método pode ser substituído para ajustar os limites para os quais o controle é dimensionado, mas não a lógica de dimensionamento.
O ScaleControl método pode ser substituído para alterar a lógica de dimensionamento do controle atual.
Confira também
.NET Desktop feedback