Diseño de formularios y escalas

Creado por Pablo Céspedes, Modificado el Wed, 27 Mar 2024 a las 04:27 PM por Pablo Céspedes

Puntos a tener en cuenta a la hora de posicionar controles en pantalla o diseñar formularios directamente en el Configurador de Formularios.


El primero y más importante es, en caso de diseñar un formulario mediante el Configurador de Formularios, hacerlo siempre en escala de Windows al 100% (configuración de Sistema > Pantalla).



Si entramos con una escala superior aparecerá un mensaje estático en las propiedades del campo indicando que la visualización, en caso de modificar las propiedades del control, será incorrecta.



Sobre el posicionamiento, recomendamos en la medida de lo posible evitar valores absolutos e intentar usar siempre valores relativos de inicio.


En este sencillo ejemplo vemos que estamos posicionando un control nuevo que hemos creado, lTexto, basándonos en el control previo Causa ya existente en el formulario.


Código C#:

IControl lCausa = gForm.Controls["Causa"];
lTexto.SetBounds(lCausa.Left - 77, lCausa.Top + lCausa.Height + 25, lCausa.Width, lCausa.Height);


Para entornos en los que los usuarios puedan disponer de diversas pantallas y escalas se han habilitado dos métodos para poder usar valores absolutos y que conserven, en la medida de lo posible, proporcionalmente el mismo tamaño y/o posición.


Los métodos, existentes en AhoraUtil.CUtil, son:


GetScaledWidth 

Devuelve el valor proporcional a la escala horizontal de la pantalla. Para llamarlo hay que pasarle el propio formulario (casteado a AhoraOCX.Form) y el valor absoluto que queremos convertir.


GetScaledHeight

Devuelve el valor proporcional a la escala vertical de la pantalla. Para llamarlo hay que pasarle el propio formulario (casteado a AhoraOCX.Form) y el valor absoluto  que queremos convertir.


Aquí el ejemplo anterior usando valores que, proporcionalmente, se verán correctos en cualquier escala soportada:


Código C#:

IControl lCausa = gForm.Controls["Causa"];
int lValorLeftProporcional = AhoraUtil.CUtil.GetScaledWidth((AhoraOCX.Form)gForm, 77);
int lValorTopProporcional = AhoraUtil.CUtil.GetScaledWidth((AhoraOCX.Form)gForm, 25);
lTexto.SetBounds(lCausa.Left - lValorLeftProporcional, lCausa.Top + lCausa.Height + lValorTopProporcional, lCausa.Width, lCausa.Height);

¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo