Abra a caixa de diálogo do arquivo e selecione um arquivo usando os controles WPF e C #

189

Eu tenho um TextBoxnome textbox1e um Buttonnome button1. Quando clico em button1, desejo procurar meus arquivos para pesquisar apenas arquivos de imagem (digite jpg, png, bmp ...). E quando seleciono um arquivo de imagem e clico em Ok na caixa de diálogo de arquivo, desejo que o diretório do arquivo seja escrito da textbox1.textseguinte maneira:

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

Respostas:

439

Algo assim deve ser o que você precisa

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
fonte
20
if (result.HasValue && result.Value) em vez de if (result == true)
eflles 26/04
2
@efles, qual é o valor que seu caminho fornece sobre o código de exemplo oficial em msdn.microsoft.com/en-us/library/… ?
Dirk Bester
5
@eflles A amostra está tecnicamente correta. De msdn.microsoft.com/en-us/library/2cf62fcy.aspx : Quando você executa comparações com tipos anuláveis, se o valor de um dos tipos anuláveis ​​for nulo e o outro não, todas as comparações serão avaliadas como falsas, exceto! = (não é igual). No entanto, suponho que se possa discutir se isso é uma exploração desse tecnicismo (eu pessoalmente acho que está bom neste caso).
Ohad Schneider
1
@Terribad, é claro! Basta atualizar a propriedade que está ligado à caixa de texto no XAML, por exemplothis.FileName = filename
Ohad Schneider
1
@sproketboy Devo confessar total confusão sobre o que você quer dizer com "aplicativo de desktop puro de 64 bits"; você poderia explicar mais? Meu entendimento é que as Microsoft.Win32bibliotecas são uma API gerenciada para o SO subjacente; a maneira como eles conversam com o sistema operacional não deve preocupar o resto do meu aplicativo (x64 64 bits), e as próprias APIs do sistema operacional são chamadas apenas de 'blah32' por motivos legados.
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
fonte