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.
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:
- 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
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!
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
WindowsFormsHost:
- 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
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