VB .NET - Usando o controle SaveFileDialog


 No artigo de hoje vou apresentar os conceitos, métodos e propriedades do controle SaveFileDialog para a linguagem VB .NET.

A classe SaveFileDialog permite que os usuários naveguem no sistema de arquivos e selecionem os arquivos a serem salvos especificando o nome do arquivo a ser salvo. Esta classe herda da classe FileDialog.

Essa classe pode abrir e substituir um arquivo existente ou criar um novo arquivo.

A maioria da funcionalidade para esta classe é encontrada na classe FileDialog.

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 SaveFileDialog :

Abaixo vemos o controle SaveFileDialog em ação, onde observamos características idênticas ao Windows Explorer como a navegação pelos arquivos e sua seleção:

A caixa de diálogo retorna o caminho e o nome do arquivo que o usuário selecionou na caixa de diálogo. No entanto, você deve escrever o código para gravar os arquivos no disco.

Como salvar um arquivo usando o SaveFileDialog :

  1. Exiba a caixa de diálogo Salvar Arquivo e chame um método para salvar o arquivo selecionado pelo usuário (A propriedade FileName retorna o nome do arquivo selecionado);
  2. Use o método OpenFile do componente SaveFileDialog para salvar o arquivo;
  3. Este método oferece a você um objeto Stream para o qual você pode gravar o arquivo;

Nota: A seguir um exemplo usando o método OpenFile para salvar o arquivo:

 Private Sub button1_Click(sender As Object, e As System.EventArgs)

        Dim myStream As Stream
        Dim saveFileDialog1 As New SaveFileDialog()
        saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
        saveFileDialog1.FilterIndex = 2
        saveFileDialog1.RestoreDirectory = True
        If saveFileDialog1.ShowDialog() = DialogResult.OK Then
            myStream = saveFileDialog1.OpenFile()
            If (myStream IsNot Nothing) Then
                ' Codigo para escrever o stream
                myStream.Close()
            End If
        End If
 End Sub

Criando um SaveFileDialog

Podemos criar um controle SaveFileDialog em tempo de projeto arrastando o controle da caixa de ferramentas(ToolBox) 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 VB .NET 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() :

Me.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog()

Para criar um controle SaveFileDialog em tempo de execução usando VB .NET basta criar uma instância da classe SaveFileDialog e definir suas propriedades:

Dim svdlg as New SaveFileDialog()

O método ShowDialog() é quem exibe a janela do controle para seleção do caminho e nome do arquivo:

saveFileDialog1.ShowDialog()
 
O código abaixo é suficiente para criar e abrir a janela de diálogo do controle saveFileDialog():

Dim svdlg As New SaveFileDialog()

If svdlg.ShowDialog() = Windows.Forms.DialogResult.OK Then

    MessageBox.Show(svdlg.FileName)

End If
 

Usamos a propriedade DialogResult para obter o resultado do fechamento da janela de diálogo.

Os valores disponíveis na enumeração DialogResult são:

Abort A caixa de diálogo retorna o valor Abort (normalmente enviado de um botão rotulado como ' Abortar ').
Cancel A caixa de diálogo retorna o valor Cancel (normalmente enviado de um botão rotulado como ' Cancelar ').
Ignore A caixa de diálogo retorna o valor Ignore (normalmente enviado a partir de um botão rotulado ignorar).
No A caixa de diálogo retorna o valor No (normalmente enviado a partir de um botão rotulado 'Não').
None Nothing é retornado pelo formulário da caixa de diálogo. Isso significa que a caixa de diálogo modal continua em execução.
OK O valor do retorno do dialog box OK (normalmente enviado por um botão com etiqueta OK).
Retry A caixa de diálogo retorna o valor Retry (normalmente enviado de um botão rotulado como ' Repetir ').
Yes A caixa de diálogo retorna o valor Yes (normalmente enviado de um botão rotulado como 'Sim').

Nota:  Os valores são exibidos no código via Intellisense:

Se um arquivo for selecionado e o botão Salvar for clicado estamos exibindo o nome do arquivo usando a propriedade FileName.

Abaixo vemos o código onde exibimos uma mensagem ao usuário quando o botão Cancelar foi clicado:

Dim svdlg As New SaveFileDialog()

If svdlg.ShowDialog() = Windows.Forms.DialogResult.OK Then
    
MessageBox.Show(svdlg.FileName)
Else
    
MessageBox.Show("Você clicou em Cancelar")
End If

As principais propriedades do controle SaveDialogBox são:

AddExtension Obtém ou define um valor indicando se a caixa de diálogo irá adicionar automaticamente uma extensão para um nome de arquivo se o usuário omitir a extensão. (Herdado de FileDialog.)
CheckFileExists Obtém ou define um valor que indica se a caixa de diálogo exibe um aviso se o usuário especificar um nome de arquivo que não existe. (Herdado de FileDialog.)
CheckPathExists Obtém ou define um valor que indica se a caixa de diálogo exibe um aviso se o usuário especificar um caminho que não existe. (Herdado de FileDialog.)
DefaultExt Obtém ou define a extensão de nome de arquivo padrão. (Herdado de FileDialog.)
FileName Obtém ou define uma seqüência de caracteres que contém o nome do arquivo selecionado na caixa de diálogo de arquivo. (Herdado de FileDialog.)
FileNames Obtém os nomes de arquivo de todos os arquivos selecionados na caixa de diálogo. (Herdado de FileDialog.)
Filter Obtém ou define a string de filtro para o nome atual, que determina as opções que aparecem em "Salvar como tipo de arquivo" ou "Arquivos do tipo" caixa na caixa de diálogo. (Herdado de FileDialog.)
FilterIndex Obtém ou define o índice do filtro atualmente selecionado na caixa de diálogo de arquivo. (Herdado de FileDialog.)
InitialDirectory Obtém ou define o diretório inicial exibido pela caixa de diálogo de arquivo. (Herdado de FileDialog.)
RestoreDirectory Obtém ou define um valor indicando se a caixa de diálogo restaura o diretório atual antes de fechar. (Herdado de FileDialog.)
ShowHelp Obtém ou define um valor indicando se o botão de Ajuda é exibido na caixa de diálogo de arquivo. (Herdado de FileDialog.)
Title Obtém ou define o título da caixa de diálogo de arquivo. (Herdado de FileDialog.)

Os eventos disponíveis para o controle SaveDialogBox são:

FileOk Ocorre quando o usuário clica no botão Abrir ou Salvar em uma caixa de diálogo de arquivo. (Herdado de FileDialog.)
HelpRequest Ocorre quando o usuário clica no botão de Ajuda em uma caixa de diálogo comum. (Herdado de CommonDialog.)

Podemos usar o evento FileOk para tratar a seleção do usuário quando o botão Abrir ou Salvar for clicado:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
     'abre uma caixa de diálogo
     SaveFileDialog1.ShowDialog()
End Sub

Private Sub SaveFileDialog1_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles SaveFileDialog1.FileOk

    'pega o nome do arquivo
   
Dim nome As String = SaveFileDialog1.FileName
    'escreve no arquivo
    System.IO.
File.WriteAllText(nome, "teste")

End Sub

 

A seguir veremos alguns exemplos usando o componente SaveFileDialog no VB .NET.

 

Recursos usados :

Exemplos usando SaveFileDialog

Abra o Visual Studio 2013 for Windows Desktop e crie um novo projeto usando o modelo Windows Forms Application com o nome SaveFileDialog_VBNET_Demo;

Menu File->New Project -> Windows Forms Application , Name = SaveFileDialog_VBNET_Demo; (Linguagem Visual Basic)

No formulário padrão form1.vb inclua a partir da ToolBox os seguintes controles:

Defina o seguinte leiaute no formulário form1.vb:

A seguir inclua o seguinte código no formulário:

Imports System.IO
Public Class Form1
    Private Sub btnSalvar_Click(sender As Object, e As EventArgs) Handles btnSalvar.Click
        'verifica se existe algo digitado na caixa de texto
        If String.IsNullOrEmpty(txtTexto.Text) Then
            MessageBox.Show("Informe algo na caixa de texto")
            Return
        End If
        'define o titulo
        svfd1.Title = "Salvar Arquivo Texto"
        'Define as extensões permitidas
        svfd1.Filter = "Text File|.txt"
        'define o indice do filtro
        svfd1.FilterIndex = 0
        'Atribui um valor vazio ao nome do arquivo
        svfd1.FileName = "Mac_" + DateTime.Now.ToString("ddMMyyyy_HHmmss")
        'Define a extensão padrão como .txt
        svfd1.DefaultExt = ".txt"
        'define o diretório padrão
        svfd1.InitialDirectory = "c:\dados"
        'restaura o diretorio atual antes de fechar a janela
        svfd1.RestoreDirectory = True
        'Abre a caixa de dialogo e determina qual botão foi pressionado
        Dim resultado As DialogResult = svfd1.ShowDialog()
        'Se o usuário pressionar o botão Salvar
        If resultado = DialogResult.OK Then
            'Cria um stream usando o nome do arquivo
            Dim fs As New FileStream(svfd1.FileName, FileMode.Create)
            'Cria um escritor que irá escrever no stream
            Dim writer As New StreamWriter(fs)
            'escreve o conteúdo da caixa de texto no stream
            writer.Write(txtTexto.Text)
            'fecha o escrito e o stream
            writer.Close()
        Else
            'exibe mensagem informando que a operação foi cancelada
            MessageBox.Show("Operação cancelada")
        End If
    End Sub
End Class

O código já esta comentado e basicamente salva o conteúdo digitado na caixa de texto txtTexto usando o SaveDialog para abrir uma caixa de diálogo Salvar Como;

O  nome do arquivo apresentando é definido pelo código: saveFileDialog1.FileName = "Mac_" + DateTime.Now.ToString("ddMMyyyy_HHmmss");

A figura a seguir mostra a caixa de diálogo sendo apresentada:

Se clicar no botão Salvar será criado um stream com o nome do arquivo no modo Create usando a enumeração FileMode, especifica como o sistema operacional deve abrir um arquivo. O modo Create especifica que o sistema operacional deve criar um novo arquivo. Se o arquivo já existir, ele será substituído.

       'Se o usuário pressionar o botão Salvar
        If resultado = DialogResult.OK Then
            'Cria um stream usando o nome do arquivo
            Dim fs As New FileStream(svfd1.FileName, FileMode.Create)
            'Cria um escritor que irá escrever no stream
            Dim writer As New StreamWriter(fs)
            'escreve o conteúdo da caixa de texto no stream
            writer.Write(txtTexto.Text)
            'fecha o escrito e o stream
            writer.Close()
        Else
            'exibe mensagem informando que a operação foi cancelada
            MessageBox.Show("Operação cancelada")
        End If

A seguir criamos uma instância de StreamWriter() para escrever o texto no arquivo.

Se o usuário clicar no botão Cancelar será exibida a mensagem de que a operação foi canceladas.

Nota: Poderíamos usar o código mais simplificado conforme mostrado a seguir:

 Private Sub btnSalvar_Click(sender As Object, e As EventArgs) Handles btnSalvar.Click
        svfd1.Filter = "Arquivos TXT (*.txt*)|*.txt"
        If svfd1.ShowDialog = Windows.Forms.DialogResult.OK Then
            My.Computer.FileSystem.WriteAllText(svfd1.FileName, txtTexto.Text, True)
        End If
End Sub

Pegue o projeto completo aqui:  SaveFileDialog_VBNET_Demo.zip

(Disse Jesus) Assim, pois, qualquer de vós, que não renuncia a tudo quanto tem, não pode ser meu discípulo.
Lucas 14:33

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti