visual studio propiedades open net form ejemplo abrir windows dialog openfiledialog

windows - studio - openfiledialog showdialog



GetOpenFileName cambia el directorio (2)

No estoy seguro de la respuesta directa, pero si tiene SPY ++ o cualquier otro programa de búsqueda de mensajes, intente verificar los mensajes que pasan cuando se cambia el directorio normal del diálogo OpenFileName. Puede descubrir la respuesta allí (aunque es la salida más difícil).

Sin embargo, es posible que alguien más sepa la respuesta sin más; esperemos que lo hagan

Pregunta:

¿Alguien sabe cómo cambiar el directorio actual de un diálogo de archivo abierto que ya se está ejecutando?

Detalles:

Tengo un diálogo de archivo abierto personalizado (usando una plantilla personalizada para agregar controles adicionales) que también tiene desactivadas todas las validaciones, comprobaciones existentes y pruebas de creación (a través de los indicadores OpenFileName).

Desactivar esas funciones deshabilita el comportamiento incorporado del diálogo que provocará que cambie la carpeta que se muestra actualmente si el usuario escribe un nombre de carpeta en el cuadro combinado "nombre de archivo" y pulsa la tecla Intro.

Me gustaría agregar ese comportamiento de vuelta. Puedo detectar cuando esto sucede a través del procedimiento de enlace. He ocultado el botón Aceptar, apagué el acelerador y puse mi propio botón "Seleccionar" en el control. Esto significa que la única vez que recibo un mensaje CDN_FILEOK es cuando el usuario ingresa Intro en el cuadro de texto luego de tipear.

No obstante, no puedo encontrar la forma de decirle programáticamente al diálogo que cambie el directorio actual.

Estaba pensando que podría lograr esto enviando un tipo de mensaje al control SHELLDLL_DefView en la ventana, pero no he podido encontrar ninguna documentación sobre él.


Pude descubrir un trabajo alrededor.

Resulta que cuando se desactiva la validación, al escribir en un nombre de directorio que termina en una "/" seguirá cambiando la carpeta que se muestra, pero escribir un nombre de directorio que no termine en "/" no lo hará.

Utilizando spy ++ pude ver que cuando se pulsa enter, se enviará un mensaje WM_COMMAND al control de diálogo común con un argumento wParam cuya palabra de orden superior es BN_CLICKED y cuya palabra de orden inferior es ID_OK.

Si hago una subclase en el cuadro de diálogo común, puedo interceptar el mensaje, cambiar el texto en el cuadro combinado de nombre de archivo, reenviar el mensaje al procedimiento de la subclase original y luego volver a cambiar el texto.

Es un poco complicado, pero me permite obtener el comportamiento que quiero del diálogo.