Duda con WinForms y correcta adaptación a varios tamaños de pantalla

Iniciado por RevolucionVegana, 28 Junio 2017, 12:34 PM

0 Miembros y 1 Visitante están viendo este tema.

RevolucionVegana

Hola a todos tengo un problema y es que yo diseño un WinForm en Visual Studio para un monitor y todo muy bien perfecto, pero después cuando paso a otra pantalla (si la pantalla es más o menos igual de tamaño no hay problema) se ve todo o muy estirado o muy apretado y los botones incluso no llegan a leerse correctamente los textos que contienen, yo he usado tableLayoutPanel prácticamente para todo, entonces me gustaría saber si hay alguna otra forma más eficaz y correcta que los tableLayoutPanel, gracias y un saludo a todos.

PD: Todo esto pensando que el programa es de pantalla completa, gracias de nuevo.
HAS DICHO ALGO NENAAAAAA?!

Eleкtro

#1
Cita de: RevolucionVeganacorrecta adaptación a varios tamaños de pantalla

Poco se puede hacer en una tecnología como WinForms, puesto que la medida de unidad de GDI/GDI+ es el pixel dependiente del monitor (a diferencia de WPF, en el que la unidad de medida no es dependiente del monitor). Windows Forms y el autoescalado no son buenos amigos, tu mejor opción es migrar a WPF si pretendes hacer algo que pueda rozar la perfección con respecto al comportamiento de los controles de la interfáz de usuario en cambios de DPI, y de resoluciones.

Si deseas seguir trabajando con WinForms entonces puedes empezar por documentarte y poner en práctica estas directrices de diseño:

Opciones alternativas sería utilizar un sofisticado set de controles profesional (de terceros) que sean DPI-aware como por ejemplo Telerik UI for WinForms (te lo recomiendo sin duda alguna), o también puedes seguir con los controles por defecto de Microsoft (o los que estés usando) y probar a utilizar un componente para WinForms llamado Softgroup .Net Forms Resize (el cual tiene una propiedad llamada "DPIAutoResize" que podrías aprovechar). Ambos productos son comerciales, pero valen su peso en oro, ¡son un 'must have'! y los puedes encontrar facilmente con..."medicina".

Saludos








RevolucionVegana

Vale muchas gracias Elektro lo leí el otro día el post pero no podía contestar y se me ha pasado, me pasaré entonces a WPF espero que no haya mucho cambio, aunque mi preocupación es si podré utilizar los controles que tengo de WinForms lo digo porque todo el código trabaja con esos controles :S

Gracias como siempre y un saludo!
HAS DICHO ALGO NENAAAAAA?!

Eleкtro

Cita de: RevolucionVegana en  2 Julio 2017, 00:25 AMme pasaré entonces a WPF espero que no haya mucho cambio

La diferencia es abismal, ten en cuenta que son tecnologías distintas y esto lo verás reflejado en todos los aspectos, empezando por el hecho de que WPF usa una liibrería de clases/espacios de nombre distintos (en WinForms: System.dll, System.Drawing.dll, System.Windows.Forms.dll, en WPF: WindowsBase.dll, PresentationCore.dll, PresentationFoundation.dll), así que olvídate de usar ninguna clase relacionada con WinForms y/o con GDI/GDI+ (puedes hacerlo, pero no sería apropiado) ya que WinForms está basado en las APIs de Win32, y WPF no.
El motor de renderizado de WinForms es DirectShow, en WPF es DirectX (Direct3D Media Foundation), en WinForms tienes muchas ventanas asociadas a algo muy conocido por el nombre HWND o window handle (o controlador de ventana), en WPF solo tienes una ventana, el resto no son tecnicamente hablando ventanas, sino elementos de ventana, y no exponen un handle de ventana (aunque siempre puedes obtener un HWND para un elemento mediante las clases de interoperabilidad con ventanas, WindowInteropHelper), y por supuesto WPF usa controles diferentes a los de WinForms, son controles más amplios y con muchas propiedades distintas. Ah, y como ya dije, WinForms utiliza una unidad de medida fija del pixel de hardware, y WPF una unidad independiente al hardware, los problemas con cambios de DPI y/o de resoluciones son cosa del pasado.

Por si lo de arriba fuese poco, al trabajar en la IDE de Visual Studio para WPF verás muchos cambios en el diseñador de la UI, es completamente diferente y además tendrás que manejar el lenguaje de formato XAML, además, al aprender programación en WPF se aprende el concepto de separar el modelo de datos, de la UI, algo que puede costar entender viniendo de WinForms ...puesto que basicamente no se hace, y aquí entra en juego tener claros conceptos como el Binding (Data Binding, Element Binding, Template Binding, etc) y Dependency Properties.

En resumen, la migración de WinForms a querer aprender WPF no es algo que se pueda llevar a cabo en un día, ni en unas semanas tampoco, WPF es una tecnología muy distinta, sofisticada y más completa que WinForms, esto implica que se requiera mucha más práctica y aprendizaje del tiempo de aprendizaje que alguien pueda necesitar para aprender a manejar WinForms, WPF de por si es algo más complejo en comparación con WinForms (en todos los aspectos inimaginables) y si vas con la idea de aprender las cosas rápido pues... te vas a acabar frustrando antes de haber empezado.

Cita de: RevolucionVegana en  2 Julio 2017, 00:25 AMmi preocupación es si podré utilizar los controles que tengo de WinForms lo digo porque todo el código trabaja con esos controles :S

Poder, puedes, con el componente Windows​Forms​Host:

...pero si lo haces, entonces estarás en la misma situación que antes. En su lugar deberías utilizar los controles equivalentes que se exponen en el framework de WPF.

Si vas a introducirte en el mundo de WPF, entonces olvida todo lo que aprendiste sobre WinForms. De hecho, si finálmente aprendes WPF, no vuelvas a utilizar WinForms nunca más... por que hacerlo sería como involucionar en lo que lleves aprendido.

Saludos








RevolucionVegana

Vale muchas gracias aunque me cueste me vendrá bien todo lo que has dicho sobretodo lo de:
Citarse aprende el concepto de separar el modelo de datos
lo veo ir por el buen camino ya que yo también me he dado cuenta de que al hacer un proyecto de unas cuantas miles de líneas si no utilizas buenas prácticas de programación cada vez cuesta más hacer cambios, sobretodo si son grandes cambios.

Saludos
HAS DICHO ALGO NENAAAAAA?!