¿Es posible forzar a OpenFileDialog a no mostrar accesos directos?

Solo quiero obtener pdf, así que estoy usando el filtro de esta manera

var dialog = new OpenFileDialog
{
   Multiselect = false,
   Filter = "Pdf Files|*.pdf"
};

Pero cuando se muestra el cuadro de diálogo, muestra archivos con la extensión pdf y lnk extensión

example image

¿Es posible prevenirlo?

2
Juan Salvador Portugal 9 may. 2019 a las 16:12

4 respuestas

La mejor respuesta

La respuesta es de los foros de MSDN.

Fuera de la caja, OpenFileDialog no puede hacer eso. Una razón podría ser que los archivos .lnk pueden ser utilizados por un usuario, para navegar a una carpeta diferente, donde él / ella espera el archivo, que necesita ser abierto.

En el enlace publicado anteriormente, el usuario 'Ryan' publicó un fragmento para excluir los archivos .lnk seleccionados en el evento FileOK.

De nuevo, no es mi código! Pero dado que algunos sitios web mueven su contenido y un enlace podría no funcionar por más tiempo, aquí el fragmento de código de 'Ryan' (escrito en VB):

Public Class Home

    Private WithEvents _fileDialog As New OpenFileDialog

    Private Sub BrowseButton1_Click(sender As Object, e As EventArgs) Handles BrowseButton1.Click
        With Me._fileDialog
            .DereferenceLinks = True    ' this allows the FileName property to have the Target of a shortcut link, instead of the shortcut link file name
            .Multiselect = False
            .Filter = "CSV (Comma delimited) (*.csv)|*.csv"
            .ShowDialog()
        End With
    End Sub

    Private Sub _fileDialog_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles _fileDialog.FileOk
        If Not Me._fileDialog.FileName Like "*.csv" Then
            ' cancel any shortcut files here
            e.Cancel = True
            MsgBox("You must select a CSV (Comma delimited) file.", MsgBoxStyle.Exclamation)
        Else
            Me.TextBox1.Text = Me._fileDialog.FileName
        End If
    End Sub

End Class
1
nilsK 10 may. 2019 a las 06:59

ES DECIR. en el cuadro de diálogo Guardar, lo uso así para los archivos de Excel.

SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "Excel files (*.xlsx)|*.xlsx";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.RestoreDirectory = true;

Entonces, con el diálogo de abrir archivo debería ser el mismo.

-1
fatihyildizhan 10 ene. 2020 a las 21:07

¿La razón por la que no desea mostrar archivos .lnk es porque desea la ruta al archivo PDF real? Si es así, debería poder configurar propiedad DereferenceLinks para true. Si el usuario selecciona un archivo .lnk, el cuadro de diálogo devolverá la ruta al archivo al que apunta el archivo .lnk en lugar del archivo .lnk en sí.

0
Andy 9 may. 2019 a las 13:59

No puede crear un cuadro de diálogo Abrir archivo para ocultar archivos específicos. Lo único que puede hacer es usar la etiqueta Filtro para filtrar la extensión de archivo especificada para guardarla pero no ocultarla.

0
user9683713 10 may. 2019 a las 07:11