Откройте диалоговое окно файла и выберите файл, используя элементы управления WPF и C #

189

У меня есть TextBoxимя textbox1и Buttonимя button1. Когда я нажимаю на кнопку, button1я хочу просмотреть свои файлы для поиска только файлов изображений (введите jpg, png, bmp ...). И когда я выбираю файл изображения и нажимаю Ok в диалоговом окне файла, я хочу, чтобы каталог файла был записан textbox1.textследующим образом:

textbox1.Text = "C:\myfolder\myimage.jpg"
NoobMaster69
источник

Ответы:

440

Что-то подобное должно быть то, что вам нужно

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
источник
20
если (result.HasValue && result.Value) вместо того , чтобы, если (результат == TRUE)
eflles
2
@efles, какое значение, по-вашему, предоставляет официальный пример кода по адресу msdn.microsoft.com/en-us/library/… ?
Дирк Бестер
5
@eflles Образец технически правильный. От msdn.microsoft.com/en-us/library/2cf62fcy.aspx : Когда вы выполняете сравнения с обнуляемыми типами, если значение одного из обнуляемых типов является нулевым, а другой - нет, все сравнения оцениваются как ложные, кроме! = (не равно). Однако я полагаю, что можно утверждать, является ли это эксплуатацией этой технической детали (лично я считаю, что в этом случае все в порядке).
Охад Шнайдер
1
@ Террибад конечно! Просто обновить свойство , который привязан к текстовому полю в XAML, напримерthis.FileName = filename
Ohad Schneider
1
@sproketboy Я должен признаться, что не понимаешь, что ты имеешь в виду под «чисто 64-битным настольным приложением»; не могли бы вы объяснить дальше? Насколько я понимаю, Microsoft.Win32библиотеки являются управляемым API для базовой ОС; то, как они общаются с ОС, не должно волновать остальную часть моего (x64 64-битного) приложения, а сами API-интерфейсы ОС называются «blah32» только по старым причинам.
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;
Дейв
источник