Pergunta

Estou trabalhando em uma tarefa e preciso usar uma classe OpenFiledialog para escolher um arquivo .txt e retornar a propriedade Nome do arquivo a uma função chamada getFileName ()

Agora este é o código que tenho para o meu botão Clique:

    Private Sub 
    btnSelectFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelectFile.Click

End Sub

Estou confuso sobre como recebo o arquivo que selecionei na minha função. Este é o código para minha função.

     Private Function GetFileName() As String

     Dim OpenDonorList As New OpenFileDialog

    OpenDonorList.Filter = "txt files (*.txt)|*.txt"
    OpenDonorList.Title = "Save File As"
    OpenDonorList.InitialDirectory = "C:\"
    OpenDonorList.RestoreDirectory = True

    DialogResult = OpenDonorList.ShowDialog

    If DialogResult = Windows.Forms.DialogResult.OK Then



    Return ?
    End Function

Como faço para obter meu arquivo .txt .txt para minha função getFileName ()?

Obrigado!

Foi útil?

Solução

Parece -me que você não tem certeza de como chamar a função do botão Clique (eu posso estar errado). Então, primeiro, quando você chama uma função, ele deve sempre retornar um valor (da palavra -chave de retorno).

Você configurou uma função que exibe um OpenFiledialog - então, que valor deve retornar? Deve retornar um caminho e nome de arquivo. Isso pode ser armazenado apenas em uma string varible.

Portanto, um pouco de ajuste no seu código pode corrigi -lo.

Aqui está um exemplo:

No seu código de botão, você deseja chamar a função real mais uma variável para armazenar o nome do caminho (como acima de uma string) simplesmente:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim thePathName As String = GetFileName()
    MessageBox.Show(thePathName)
End Sub

Agora, na função que você deseja adicionar o retorno. Há um problema com a sua estatura IF (sem fim se). Se o resultado estiver bom, retorne o nome do caminho. Caso contrário, retorne nulo e chame um erro (você pode alterar isso):

Private Function GetFileName() As String

    Dim OpenDonorList As New OpenFileDialog

    OpenDonorList.Filter = "txt files (*.txt)|*.txt"
    OpenDonorList.Title = "Save File As"
    OpenDonorList.InitialDirectory = "C:\"
    OpenDonorList.RestoreDirectory = True

    DialogResult = OpenDonorList.ShowDialog

    If DialogResult = Windows.Forms.DialogResult.OK Then
        Return OpenDonorList.FileName
    Else
        MessageBox.Show("Error!")
        Return vbNull
    End If

End Function

No código do botão, você pode chamar outra rotina que usa o valor do caminho para fazer algo, como abrir o arquivo para leitura. No exemplo acima, ele apenas mostrará uma caixa de mensagem com o nome do caminho para o arquivo selecionado.

Espero que isto ajude.

Outras dicas

Você já tem a maior parte do código, tudo o que você precisa fazer é usar FileName Propriedade para devolver o arquivo selecionado:

If DialogResult = Windows.Forms.DialogResult.OK Then
    Return OpenDonorList.FileName
End If

Eu também adicionaria essa linha às configurações da janela aberta do arquivo para garantir que apenas um arquivo possa ser selecionado:

OpenDonorList.Multiselect = False
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim fileName As String = GetFileName()
    If (String.IsNullOrEmpty(fileName)) Then
        MessageBox.Show("No file was selected.")
    Else
        MessageBox.Show(String.Format("You selected file: {0}", fileName))
    End If
End Sub

Private Function GetFileName() As String
    Dim openDonorList As New OpenFileDialog()
    With openDonorList
        .Filter = "txt files (*.txt)|*.txt"
        .Title = "Save File As"
        .InitialDirectory = "C:\"
        .RestoreDirectory = True
    End With
    Dim result As DialogResult = openDonorList.ShowDialog()
    If result = Windows.Forms.DialogResult.OK Then Return openDonorList.FileName
    Return Nothing
End Function
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top