Apri la finestra di dialogo del file e seleziona un file usando i controlli WPF e C #


189

Ho un TextBoxnome textbox1e un Buttonnome button1. Quando faccio clic su button1voglio sfogliare i miei file per cercare solo i file di immagine (digitare jpg, png, bmp ...). E quando seleziono un file di immagine e faccio clic su OK nella finestra di dialogo del file, voglio che la directory del file sia scritta in textbox1.textquesto modo:

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

Risposte:


440

Qualcosa del genere dovrebbe essere quello che ti serve

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;
    }
}

20
if (result.HasValue && result.Value) invece di if (result == true)
eflles

2
@efles qual è il valore che fornisce sulla strada rispetto al codice di esempio ufficiale all'indirizzo msdn.microsoft.com/en-us/library/… ?
Dirk Bester,

5
@eflles Il campione è tecnicamente corretto. Da msdn.microsoft.com/en-us/library/2cf62fcy.aspx : quando si eseguono confronti con tipi nullable, se il valore di uno dei tipi nullable è nullo e l'altro no, tutti i confronti vengono valutati come falsi tranne! = (non uguale). Tuttavia, suppongo che si possa discutere se si tratti di uno sfruttamento di questo tecnicismo (penso personalmente che in questo caso sia OK).
Ohad Schneider,

1
@Terribad ovviamente! Aggiorna semplicemente la proprietà associata alla casella di testo in XAML, ad esthis.FileName = filename
Ohad Schneider

1
@sproketboy Devo confessare la completa confusione su cosa intendi per "pura applicazione desktop a 64 bit"; potresti spiegare ulteriormente? La mia comprensione è che le Microsoft.Win32librerie sono un'API gestita per il sistema operativo sottostante; il modo in cui parlano con il sistema operativo non dovrebbe interessare il resto della mia applicazione (64 bit a 64 bit) e le stesse API del sistema operativo sono chiamate "blah32" solo per motivi legacy.
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;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.