2010-01-20 11 views
6

Tengo una aplicación .NET 2.0 que se ejecuta en Compact Framework. Tiene un montón de formas diferentes que fueron originalmente diseñadas para ejecutarse en un dispositivo específico con una resolución de pantalla específica. Ahora estoy buscando que esta aplicación se ejecute en otros dispositivos que tienen resoluciones de pantalla muy diferentes (algunos tienen relaciones de aspecto completamente opuestas, donde la pantalla ahora es más alta que ancha). Mi pregunta es ¿cómo puedo cambiar mis formularios para que se vean bien en estas otras pantallas?Diseñar formularios para trabajar en diferentes resoluciones y relaciones de aspecto en Windows CE

Esto es un poco diferente de diseñar formularios en el marco completo ya que tengo que diseñar estos formularios para que ocupen toda la pantalla ya que las pantallas son muy pequeñas. He pensado en crear formularios separados para cada tipo de orientación de pantalla (por ejemplo, MyForm_Wide.cs, MyForm_Tall.cs, etc.). Me gustaría poder reutilizar el código generado que no es diseñador y que contiene mucha lógica empresarial vinculada a los controles de la interfaz de usuario. Tal vez podría de alguna manera usar clases parciales para que esto ocurra (por ejemplo, MyForm.cs de alguna manera se compila en MyForm_Wide.Designer.cs, etc.). Realmente me gustaría evitar versiones compiladas específicamente para cada orientación de pantalla. Otro enfoque en el que he pensado es tratar de reorganizar algunos controles en tiempo de ejecución en función del tamaño de pantalla determinado.

¿Qué piensan?

Respuesta

1

Creo que he descubierto lo que quiero hacer. Por alguna razón, incluso en mis dispositivos de alta resolución, el DPI todavía aparece como 96 según la API de WinForms, por lo que la escala automática no está haciendo nada. En cambio, si llamo manualmente al Scale en mis controles, obtengo que escalen exactamente como quiero. Ahora bien, esto no resuelve completamente mi problema en escenarios en los que no quiero hacer ninguna escala, pero sí quiero reorganizar mis controles si la pantalla tiene una relación de aspecto opuesta a la que originalmente diseñé. Para ese caso, creo que voy a analizar el uso de diferentes paneles de diseño (por ejemplo, FlowLayoutPanel y TableLayoutPanel) para organizar los controles adecuadamente.

espero que esto le ayudará a cualquier empleado de Google futuro ...

+0

buen trabajo trooper. –

+1

Solo para agregar algo de información adicional aquí, el FlowLayoutPanel y el TableLayoutPanel que mencioné anteriormente no están disponibles en el marco compacto (debería haberlo visto). Todo lo que realmente quiero es una forma de lograr que el diseñador de VS genere básicamente varios métodos InitializeComponent para diferentes resoluciones. Luego, en el constructor de mi formulario, simplemente puedo elegir a cuál llamar. No puedo encontrar una manera de hacer esto, desafortunadamente. Tal vez deba buscar crear un complemento VS que haga esto ... – Jason

+0

Encontré el siguiente artículo de Microsoft sobre este tema: http://msdn.microsoft.com/en-us/library/ms838174.aspx Es destinado para VS .NET 2003, pero no parece que hayan abordado realmente este problema en ningún lanzamiento posterior. Básicamente, dicen que debe crear métodos de retrato y paisaje y copiar el código generado por el diseñador VS para cada diseño en el método apropiado. Estoy siguiendo este enfoque, excepto que estoy copiando todos los métodos de InitializeComponent ya que es muy difícil elegir el código de tamaño/posición. – Jason

1

Utilizamos el marco Orientation Aware Control de Clarius. Resuelve el problema no solo del factor de forma, sino también de los dispositivos que lo soportan, cambio de orientación (rotación de la pantalla).

Quizás el aspecto más distintivo del desarrollo móvil en relación con el desarrollo de escritorio tradicional es la necesidad de admitir una gama cada vez mayor de factores de forma del dispositivo.

Para los desarrolladores móviles expertos, no es ninguna novedad que el diseño de aplicaciones móviles que admitan múltiples factores de forma, resoluciones y orientaciones de pantalla sea una tarea no trivial, lenta y desafiante. También es generalmente evidente que las características incorporadas de acoplamiento y anclaje en .NET Compact Framework v2.0 están lejos de ser suficientes.

El Orientation Aware Control permite diseñar y codificar un solo control o formulario con múltiples diseños o máscaras que se aplican automáticamente en tiempo de ejecución (y tiempo de diseño) según el formato, la resolución y la orientación disponibles. Sus sobresalientes formularios de Visual Studio y la integración del diseñador de control de usuario y el comportamiento UI adaptativo de código cero hacen del Orientation Aware Control un acompañante imprescindible para cualquier tienda móvil dirigida a múltiples dispositivos, recuperando la productividad que necesita para enfocarse en hacer crecer su negocio.

+0

Ese es un marco bastante atractivo. Creo que si estuviera comenzando un nuevo proyecto, buscaría usarlo, pero para mi proyecto actual tengo demasiado código para cambiar en este punto. – Jason

1

Dado que los diseñadores de C# están muy "orientados a píxeles", no existe una forma sencilla de convertir sus formularios.

No sé cuánto esfuerzo desea poner en esto, pero si tiene mucho tiempo y quiere una solución realmente flexible, le sugiero que utilice algún tipo de administrador de diseño que admita distribuciones de flujo, diseños de bordes etc.

Por supuesto, los diseñadores originales de C# no serán de mucha ayuda en el diseño de estos formularios flexibles administrados por el diseño.

Pero el uso de un administrador de diseño puede ralentizar la visualización inicial de su formulario. Si desea una visualización de formulario realmente de alta velocidad, deberá calcular todas las posiciones de todos los controles en su formulario antes de mostrar el formulario. Reorganiza los controles y muestra tu forma; sin embargo, esta es una gran cantidad de codificación y no muy flexible con respecto a los cambios de la interfaz gráfica de usuario.

1

Probablemente debas establecer la propiedad 'AutoScaleMode' de tus formularios principales en 'DPI'.

Luego, es una cuestión de utilizar anclajes y acoplamiento en sus controles particulares en los formularios. Si lo haces de esta manera, el marco compacto mantendrá las cosas donde pensaste que estarían.

Además, puede cambiar la propiedad 'Form Factor' del formulario para ver cómo se vería su formulario en dispositivos móviles de diferentes tamaños y formas.

+1

Este artículo debería darle algunos consejos sobre cómo usar Anchors y docking: http://msdn.microsoft.com/en-us/library/ms229649.aspx –

+0

Mis formularios ya usan escalamiento DPI y estoy ajustando los anclajes y acoplamiento según sea necesario. Sin embargo, todavía tengo un par de problemas: para pantallas de mayor resolución, los controles no se ven correctamente (por ejemplo, los cuadros de texto se extienden por todo el ancho de la pantalla cuando realmente no los necesitan, en las pantallas de menor resolución necesitan) a). Además, para los dispositivos que tienen diferentes relaciones de aspecto, esto no funciona en absoluto, ya que sé cómo los controles son muy amplios, pero ahora hay una barra de desplazamiento vertical que se necesita para desplazarse hacia abajo. – Jason

0

La propiedad 'de tamaño automático' en las etiquetas meta la pata cuando se cambia entre los factores de forma demasiado - por cierto - por lo que guardo establece en false.

Cuestiones relacionadas