C# e VB .NET- Usando o controle OpenFileDialog
Neste artigo eu vou falar sobre o controle OpenFileDialog que faz parte dos controles de Diálogos existente na caixa de ferramenta da IDE do Visual Studio e das versões Express tanto para a linguagem C# como para a linguagem VB .NET. |
A figura abaixo exibe a imagem da ToolBox destacando a aba Dialogs onde se encontram os controles de diálogos, e , dentre eles vemos o OpenFileDialog objeto deste artigo:
O controle OpenFileDialog é usado para localizar e selecionar arquivos em um computador.
Abaixo vemos o controle OpenFileDialog onde observamos características idênticas ao Windows Explorer como a navegação pelos arquivos e sua seleção:
Criando um OpenFileDialog
Podemos criar um controle OpenFileDialog em tempo de projeto arrastando o controle da caixa de ferramentas e soltando no formulário Windows Forms.
Ao concluir esta tarefa veremos o controle ser exibido com o nome padrão na base do formulário, e, se pressionarmos F4 veremos também a janela de propriedades do controle onde podemos definir diversas propriedades para o controle:
Na linguagem C# ao incluir o controle no formulário será incluída de forma automática duas linhas de código no projeto na seção #region Windows Form Designer generated code no interior da rotina private void InitializeComponent() :
this.openFileDialog1
= new System.Windows.Forms.OpenFileDialog();
this.openFileDialog1.FileName = "openFileDialog1";
Para criar um controle OpenFileDialog em tempo de execução usando C# basta criar uma instância da classe OpenFileDialog e definir suas propriedades:
OpenFileDialog
openFileDialog1 = new OpenFileDialog();
O método ShowDialog() é quem exibe a janela do
controle para localização e seleção de arquivos:
openFileDialog1.ShowDialog();
O código abaixo é
suficiente para criar e abrir a janela de diálogo do controle
OpenFileDialog():
OpenFileDialog openFileDialog1 = new OpenFileDialog(); if (openFileDialog1.ShowDialog() == DialogResult.OK) { } |
Definindo as propriedades do controle OpenFileDialog
Depois de incluir o controle no formulário podemos definir as propriedades do controle na janela de propriedades.
Vejamos a seguir as principais propriedades deste controle:(Válidas para C# e VB .NET)
1-
InitialDirectory - Representa o
diretório a ser exibido quando a janela de diálogo
aparecer pela primeira vez. Ex: openFileDialog1.InitialDirectory = @"C:\"; Se a propriedade RestoreDirectory
for definida como True a caixa de diálogo restaura o
diretório atual antes de ser fechada. 2- Title - Usada para definir ou atribuir um título a janela de diálogo: Ex: openFileDialog1.Title = "Localizar Arquivos"; 3- Default Extension - Representa a extensão padrão do arquivo a ser localizado: Ex: openFileDialog1.DefaultExt = "txt"; 4- Filter
- Representa o filtro da janela de diálogo que será
usado para filtrar o tipo de arquivos a serem 5- FilterIndex - Representa o indíce do filtro atualmetne selecionado na janela de diálogo: Ex:openFileDialog1.FilterIndex = 2; 6-
ChecFileExists - Indica se a janela de diálogo
exibirá um aviso se o usuário especificar um nome de
arquivo inexistente; 7-
CheckPathExists - Indica se a janela de diálogo
exibirá um aviso se o usuário especificar um caminho
inexistente; 8- FileName - Representa o nome do arquivo selecionado na janela de diálogo. Ex: textBox1.Text = openFileDialog1.FileName; 9- MultiSelect
- Se esta propriedade for definida como True pode-se
selecionar mais de um arquivo e FileNames
representará todos 10- ReadyOnlyChecked - Indica se a caixa de verificação estará selecionada: Ex: openFileDialog1.ReadOnlyChecked = true; 11- ShowReadyOnly - Indica se a caiaxa de verificação read-only estará disponível ou não. Ex: openFileDialog1.ReadOnlyChecked = true; |
Para concluir vamos criar uma pequena aplicação Windows Forms usando o controle OpenFileDialog que permitirá selecionar mais de um arquivo, no caso arquivos imagens, na janela de diálogo exibindo as imagens selecionadas em um container flowLayoutPanel1.
Abra o Visual C# 2010 Express Edition e crie um novo projeto usando o modelo Windows Forms Application com o nome OpenFIleDialogDemo;
Menu File->New Project -> Windows Forms Application , Name = OpenFileDialogDemo;
No formulário padrão form1.cs inclua a partir da ToolBox os seguintes controles:
Defina o seguinte leiaute no formulário form1.cs:
Vamos definir os namespaces usados no projeto conforme abaixo:
using
System; using System.Drawing; using System.Windows.Forms; using System.Security; |
imports
System imports System.Drawing imports System.Windows.Forms imports System.Security |
C# | VB .NET |
A seguir no evento Click do botão de comando - btnSelecionarArquivos - inclua o código abaixo:
private void btnSelecionarArquivos_Click(object sender, EventArgs e) { //define as propriedades do controle //OpenFileDialog this.ofd1.Multiselect = true; this.ofd1.Title = "Selecionar Fotos"; ofd1.InitialDirectory = @"C:\Users\macoratti\Pictures"; //filtra para exibir somente arquivos de imagens ofd1.Filter = "Images (*.BMP;*.JPG;*.GIF,*.PNG,*.TIFF)|*.BMP;*.JPG;*.GIF;*.PNG;*.TIFF|" + "All files (*.*)|*.*"; ofd1.CheckFileExists = true; ofd1.CheckPathExists = true; ofd1.FilterIndex = 2; ofd1.RestoreDirectory = true; ofd1.ReadOnlyChecked = true; ofd1.ShowReadOnly = true; DialogResult dr = this.ofd1.ShowDialog(); if (dr == System.Windows.Forms.DialogResult.OK) { // Le os arquivos selecionados foreach (String arquivo in ofd1.FileNames) { txtArquivo.Text += arquivo; // cria um PictureBox try { PictureBox pb = new PictureBox(); Image Imagem = Image.FromFile(arquivo); pb.SizeMode = PictureBoxSizeMode.StretchImage; //para exibir as imagens em tamanho natural //descomente as linhas abaixo e comente as duas seguintes //pb.Height = loadedImage.Height; //pb.Width = loadedImage.Width; pb.Height = 100; pb.Width = 100; //atribui a imagem ao PictureBox - pb pb.Image = Imagem; //inclui a imagem no containter flowLayoutPanel flowLayoutPanel1.Controls.Add(pb); } catch (SecurityException ex) { // O usuário não possui permissão para ler arquivos MessageBox.Show("Erro de segurança Contate o administrador de segurança da rede.\n\n" + "Mensagem : " + ex.Message + "\n\n" + "Detalhes (enviar ao suporte):\n\n" + ex.StackTrace); } catch (Exception ex) { // Não pode carregar a imagem (problemas de permissão) MessageBox.Show("Não é possível exibir a imagem : " + arquivo.Substring(file.LastIndexOf('\\')) + ". Você pode não ter permissão para ler o arquivo , ou " + " ele pode estar corrompido.\n\nErro reportado : " + ex.Message); } } } }//fim e evento botão |
O código já esta comentado e por este motivo dispensa explicações.
O mesmo código para a linguagem VB .NET ficaria assim:
Private Sub btnSelecionarArquivos_Click(sender As Object, e As EventArgs) 'define as propriedades do controle 'OpenFileDialog Me.ofd1.Multiselect = True Me.ofd1.Title = "Selecionar Fotos" ofd1.InitialDirectory = "C:\Users\macoratti\Pictures" 'filtra para exibir somente arquivos de imagens ofd1.Filter = "Images (*.BMP;*.JPG;*.GIF,*.PNG,*.TIFF)|*.BMP;*.JPG;*.GIF;*.PNG;*.TIFF|" & "All files (*.*)|*.*" ofd1.CheckFileExists = True ofd1.CheckPathExists = True ofd1.FilterIndex = 2 ofd1.RestoreDirectory = True ofd1.ReadOnlyChecked = True ofd1.ShowReadOnly = True Dim dr As DialogResult = Me.ofd1.ShowDialog() If dr = System.Windows.Forms.DialogResult.OK Then ' Le os arquivos selecionados For Each arquivo As [String] In ofd1.FileNames txtArquivo.Text += arquivo ' cria um PictureBox Try Dim pb As New PictureBox() Dim Imagem As Image = Image.FromFile(arquivo) pb.SizeMode = PictureBoxSizeMode.StretchImage 'para exibir as imagens em tamanho natural 'descomente as linhas abaixo e comente as duas seguintes 'pb.Height = loadedImage.Height; 'pb.Width = loadedImage.Width; pb.Height = 100 pb.Width = 100 'atribui a imagem ao PictureBox - pb pb.Image = Imagem 'inclui a imagem no containter flowLayoutPanel flowLayoutPanel1.Controls.Add(pb) Catch ex As SecurityException ' O usuário não possui permissão para ler arquivos MessageBox.Show((("Erro de segurança Contate o administrador de segurança da rede." & vbLf & vbLf & "Mensagem : ") + ex.Message & vbLf & vbLf & "Detalhes (enviar ao suporte):" & vbLf & vbLf) + ex.StackTrace) Catch ex As Exception ' Não pode carregar a imagem (problemas de permissão) MessageBox.Show(("Não é possível exibir a imagem : " & arquivo.Substring(arquivo.LastIndexOf("\"C)) & ". Você pode não ter permissão para ler o arquivo , ou " & " ele pode estar corrompido." & vbLf & vbLf & "Erro reportado : ") + ex.Message) End Try Next End If End Sub |
Executando o projeto e clicando no botão - Selecionar Arquivos, teremos a janela de diálogo exibindo somente arquivos do tipo imagem conforme a figura a seguir:
Selecionando alguns arquivos e clique em Abrir teremos a exibição dos nomes selecionados na caixa de texto e as imagens no container do formulário conforme figura abaixo:
Assim destacamos como usar o controle OpenFileDialog que é muito útil e versátil tanto para C# como para VB .NET.
Pegue o projeto completo aqui: versão C# => OpenFileDialogDemoCsharp.zip versão VB .NET => OpenFileDialogDemoVBNET.zip
Eu sei é apenas C# e VB .NET, mas eu gosto...
Referências: