Problema gráfico de Windows Forms en el sistema operativo Windows 10

Cuando ejecuto cualquier aplicación de Windows Forms en Windows 10, los gráficos dentro de la ventana parecen estar distorsionados:

Mala imagen

En el momento del diseño esto no sucede:

Buena imagen

¿Alguien ha experimentado esto?

(Por favor, abra las imágenes para ver mejor)

Para resolver el problema, puede hacer su aplicación DPI-Aware usando cualquiera de estas opciones:

  • Usando el archivo de manifiesto de la aplicación
  • Usando SetProcessDPIAware

Usando el archivo de manifiesto de la aplicación

Para crear la aplicación DPI-Aware, puede agregar un Archivo de Manifiesto de Aplicación a su proyecto. Luego, en el archivo app.manifest , descomente la parte que está relacionada con DPI-Awareness:

   true   

Luego, en su archivo app.config , agregue EnableWindowsFormsHighDpiAutoResizing estableciendo su valor en true:

    

Para obtener más información, consulte la página de High DPI MSDN.

Usando SetProcessDPIAware

Puede usar el método SetProcessDPIAware() antes de mostrar su formulario principal para configurar los ppp de la aplicación y evitar que Windows escale la aplicación. También debe verificar que la versión de Windows sea mayor o igual a vista:

 static class Program { [DllImport("user32.dll", SetLastError = true)] static extern bool SetProcessDPIAware(); ///  /// The main entry point for the application. ///  [STAThread] static void Main() { if (Environment.OSVersion.Version.Major >= 6) SetProcessDPIAware(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(true); Application.Run(new Form1()); } } 

Nota

Si bien anteriormente utilicé el método SetProcessDPIAware para resolver el problema, pero leí la nota antes de su uso:

SetProcessDPIAware está sujeto a una posible condición de SetProcessDPIAware si una DLL SetProcessDPIAware caché las configuraciones de dpi durante la inicialización. Por este motivo, se recomienda que se reconozca dpi en el manifiesto de la aplicación (.exe) en lugar de llamar a SetProcessDPIAware .

SetProcessDPIAware está disponible para su uso solo en los sistemas operativos especificados en la sección Requisitos. Este método puede tener un comportamiento inesperado en versiones posteriores del sistema operativo. Use SetProcessDpiAwareness en SetProcessDpiAwareness lugar.

Las DLL deben aceptar la configuración de dpi del proceso de host en lugar de llamar a SetProcessDPIAware ellos mismos. Para establecerse correctamente, se debe especificar dpiAware como parte del manifiesto de la aplicación (.exe).