Estuve trabajando en una aplicación de Windows Forms y recientemente agregué una página de configuración simple que permite al usuario seleccionar una carpeta para la salida. OpenFileDialog
es feo y no es agradable de usar, por lo que agregué WindowsAPICodePack para obtener acceso a CommonOpenFileDialog
, todo bien allí.
Cuando abro CommonOpenFileDialog
, la aplicación de formulario de Windows se reduce a un tamaño más pequeño, como se muestra en la imagen adjunta.
A la izquierda está el programa normalmente, a la derecha está con el diálogo abierto:
Intenté verificar el tamaño del Form
antes y después, eso no cambia, así que estoy chocando contra una pared de ladrillos. Cualquier información sería útil, puedo proporcionar más detalles si es necesario.
El código para abrir el cuadro de diálogo es:
CommonOpenFileDialog dialog = new CommonOpenFileDialog(); dialog.DefaultDirectory = selectedFolderTextBox.Text; dialog.IsFolderPicker = true; if (dialog.ShowDialog() != CommonFileDialogResult.Ok) return; selectedFolderTextBox.Text = dialog.FileName;
Este problema me sucede cuando cambio la Escala y el diseño en Configuración de Windows-> Formulario del sistema 100% a un valor más alto. Probablemente tenga que ver con un escalado alto de DPI y DPI.
Encontré varias soluciones:
Esta solución es solo para .NET Framework versión 4.7 o superior.
Agregue esto al archivo App.config .
<System.Windows.Forms.ApplicationConfigurationSection> <add key="DpiAwareness" value="PerMonitorV2" /> </System.Windows.Forms.ApplicationConfigurationSection>
Fuente: Configuración de su aplicación Windows Forms para soporte de alto DPI :
Habilite el reconocimiento de DPI por monitor en el archivo app.config.
Windows Forms presenta un nuevo elemento System.Windows.Forms.ApplicationConfigurationSection para admitir nuevas funciones y personalizaciones agregadas a partir de .NET Framework 4.7. Para aprovechar las nuevas funciones que admiten DPI alto, agregue lo siguiente al archivo de configuración de su aplicación.
<System.Windows.Forms.ApplicationConfigurationSection> <add key="DpiAwareness" value="PerMonitorV2" /> </System.Windows.Forms.ApplicationConfigurationSection>
Importante
En versiones anteriores de .NET Framework, usó el manifiesto para agregar soporte de alto DPI. Este enfoque ya no se recomienda, ya que anula la configuración definida en el archivo app.config.
Utilice el paquete NuGet Ookii.Dialogs.WinForms. No tiene el problema de la contracción. Tiene un VistaOpenFileDialog
similar al CommonFileDialog
de WindowsAPICodePack. También tiene un buen navegador de carpetas VistaFolderBrowserDialog
como CommonFileDialog
con IsFolderPicker
establecido en true
.
Esta solución requiere cambiar manualmente la configuración de compatibilidad para cada archivo .exe de la aplicación individualmente, por lo que no es la mejor solución.
Para hacer esto, debe hacer clic con el botón derecho en el archivo .exe, seleccionar Propiedades-> Compatibilidad-> Cambiar la configuración de DPI alta y marcar Anular el comportamiento de escalado de DPI alto y seleccionar una de las opciones (ver: Cómo usar la escala de DPI en Windows 10 para arreglar viejas aplicaciones borrosas )
Habilite el reconocimiento de dpi agregando el archivo app.manifest y descomente estos bloques.
<application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> </windowsSettings> </application>
Esto funciona para mí en mi Surface Pro 4 (escala de dpi 200%).