Abra el cuadro de diálogo de archivo y seleccione un archivo con los controles WPF y C #

189

Tengo un TextBoxnombre textbox1y un Buttonnombre button1. Cuando hago clic en button1Deseo explorar mis archivos para buscar solo archivos de imagen (escriba jpg, png, bmp ...). Y cuando selecciono un archivo de imagen y hago clic en Aceptar en el cuadro de diálogo de archivo, quiero que el directorio de archivos se escriba de la textbox1.textsiguiente manera:

textbox1.Text = "C:\myfolder\myimage.jpg"
NoobMaster69
fuente

Respuestas:

440

Algo así debería ser lo que necesitas

private void button1_Click(object sender, RoutedEventArgs e)
{
    // Create OpenFileDialog 
    Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();



    // Set filter for file extension and default file extension 
    dlg.DefaultExt = ".png";
    dlg.Filter = "JPEG Files (*.jpeg)|*.jpeg|PNG Files (*.png)|*.png|JPG Files (*.jpg)|*.jpg|GIF Files (*.gif)|*.gif"; 


    // Display OpenFileDialog by calling ShowDialog method 
    Nullable<bool> result = dlg.ShowDialog();


    // Get the selected file name and display in a TextBox 
    if (result == true)
    {
        // Open document 
        string filename = dlg.FileName;
        textBox1.Text = filename;
    }
}
Klaus78
fuente
20
if (result.HasValue && result.Value) en lugar de if (result == true)
eflles
2
@efles, ¿cuál es el valor que proporciona su camino sobre el código de muestra oficial en msdn.microsoft.com/en-us/library/… ?
Dirk Bester
55
@eflles La muestra es técnicamente correcta. De msdn.microsoft.com/en-us/library/2cf62fcy.aspx : Cuando realiza comparaciones con tipos anulables, si el valor de uno de los tipos anulables es nulo y el otro no, todas las comparaciones se evalúan como falsas, excepto. = (no igual). Sin embargo, supongo que se podría argumentar si esto es una explotación de este tecnicismo (personalmente creo que está bien en este caso).
Ohad Schneider
1
@Terribad, por supuesto! Simplemente actualice la propiedad vinculada al cuadro de texto en el XAML, por ejemplothis.FileName = filename
Ohad Schneider
1
@sproketboy Debo confesar una completa confusión en cuanto a lo que quieres decir con una "aplicación de escritorio pura de 64 bits"; podrías explicar más? Entiendo que las Microsoft.Win32bibliotecas son una API administrada para el sistema operativo subyacente; la forma en que hablan con el sistema operativo no debería ser motivo de preocupación para el resto de mi aplicación (x64 64 bits), y las API del sistema operativo solo se denominan 'blah32' por motivos heredados.
VisualMelon
23
var ofd = new Microsoft.Win32.OpenFileDialog() {Filter = "JPEG Files (*.jpeg)|*.jpeg|PNG Files (*.png)|*.png|JPG Files (*.jpg)|*.jpg|GIF Files (*.gif)|*.gif"}; 
var result = ofd.ShowDialog();
if (result == false) return;
textBox1.Text = ofd.FileName;
Dave
fuente