Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: RevolucionVegana en 28 Junio 2017, 12:34 pm



Título: Duda con WinForms y correcta adaptación a varios tamaños de pantalla
Publicado por: RevolucionVegana en 28 Junio 2017, 12:34 pm
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.


Título: Re: Duda con WinForms y correcta adaptación a varios tamaños de pantalla
Publicado por: Eleкtro en 28 Junio 2017, 13:08 pm
Cita de: RevolucionVegana
correcta 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:
  • Automatic scaling in Windows Forms | Microsoft.com (https://docs.microsoft.com/en-us/dotnet/framework/winforms/automatic-scaling-in-windows-forms)
  • How to write WinForms code that auto-scales to system font and dpi settings? | StackOverflow.com (https://stackoverflow.com/a/29766847/1248295)

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


Título: Re: Duda con WinForms y correcta adaptación a varios tamaños de pantalla
Publicado por: RevolucionVegana en 2 Julio 2017, 00:25 am
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!


Título: Re: Duda con WinForms y correcta adaptación a varios tamaños de pantalla
Publicado por: Eleкtro en 2 Julio 2017, 04:49 am
me 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.

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

Poder, puedes, con el componente Windows​Forms​Host:
  • https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.integration.windowsformshost?view=netframework-4.7

...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


Título: Re: Duda con WinForms y correcta adaptación a varios tamaños de pantalla
Publicado por: RevolucionVegana en 2 Julio 2017, 09:52 am
Vale muchas gracias aunque me cueste me vendrá bien todo lo que has dicho sobretodo lo de:
Citar
se 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