• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Sir Pereira

[VB.NET] ler e combo

28 mensagens neste tópico

tenho uma combobox, e com uma streamreader quero que cada linha da streamreader vá sendo adicionada à combobox... o objectivo é uma listagem de alunos...

o código que eu tinha feito é este:

    Private Sub cmbAlunos_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbAlunos.SelectedIndexChanged
        Dim swreader As New StreamReader("C:\alunos.txt")
        swreader.ReadToEnd()
        Dim linha As String
        While Not swreader.EndOfStream
            linha = swreader.ReadLine
            cmbAlunos.Items.Add(linha)
        End While
        swreader.Close()
    End Sub

o problema é que nao sei porque nao lista nada  :wallbash:

e ja agora gostava que alguem me ajudasse no codigo para a eliminaçao de uma linha por exemplo com um dos nomes da combobox...

thanks  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

olha. da pa ler uma linha numerada? tipo, ler so a linha dois. se sim diz.me como k acho k t posso ajudar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom, encontrei isto pra ti:

Dim TextLine As String
Dim FILE_NAME As String = "C:\test.txt"
If System.IO.File.Exists(FILE_NAME) = True Then

Dim objReader As New System.IO.StreamReader(FILE_NAME)

Do While objReader.Peek() <> -1
TextLine = TextLine & objReader.ReadLine() & vbNewLine
Loop

Textbox1.Text = TextLine

Else

MsgBox("File Does Not Exist")

End If

So inside the loop, we go round building up the TextLine variable. Once all the file has been read (when Peek() has a value of -1), we then place it into Textbox1.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e para eliminar sabes? e já agora, para que serve o Peek?

é verdade, também já tinha encontrado outra maneira de fazer:

Dim swreader As New StreamReader("C:\alunos.txt")
        cmbAlunoEliminado.Items.AddRange(Split(swreader.ReadToEnd, _
vbCrLf))
        cmbAlunoEliminado.Text = "Escolha o aluno a ser eliminado:"
swreador.Close()

pus isso no form_load e lá lista... mas por exemplo, eu tenho duas combos, uma para simplesmente mostrar os alunos e outra com possibilidade de se carregar num botão e o aluno em escolha ser eliminado, e queria que isso listasse os alunos para as duas combos, por isso tinha este codigo:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim swreader As New StreamReader("C:\alunos.txt")
        cmbAlunoEliminado.Items.AddRange(Split(swreader.ReadToEnd, _
vbCrLf))
        cmbAlunoEliminado.Text = "Escolha o aluno a ser eliminado:"
        cmbAlunos.Items.AddRange(Split(swreader.ReadToEnd, _
            vbCrLf))
        cmbAlunos.Text = "Escolha o aluno:"

        swreader.Close()
    End Sub

o problema é que não sei porquê só lista para o primeiro :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

DJ_BloodHunter o teu codigo inical nao te listava nada pq estavas a mandar logo para o fim a posição no ficheiro.

swreader.ReadToEnd()

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Espero k isto te ajude

Dim FILE_NAME As String = "C:\test.txt" 'define o documento
Dim TextLine As String

If System.IO.File.Exists(FILE_NAME) = True Then 've se o ficheiro existe, se nao existir vai po else

Dim objReader As New System.IO.StreamReader(FILE_NAME)

Do While objReader.Peek() <> -1 'isto representa quando todo o ficheiro foi lido (peek fica com o valor -1)
TextLine = TextLine & objReader.ReadLine() & vbNewLine 'aqui ele estah a escrever a linha, usa um loop pro fazer, eh aki k alteras o teu código
Loop

Textbox1.Text = TextLine 'atribui o valor da textline a uma textbox.

Else

MsgBox("File Does Not Exist")

End If

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta ler agora, eu não sei pk posto sem comentários, vou ter de os meter depois...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Jovem estas a usar o evento errado para preencher a combobox com os alunos.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '' prenche combo
        Dim swreader As New StreamReader("C:\alunos.txt")
        Dim linha As String = String.Empty
        While Not swreader.EndOfStream
            linha = swreader.ReadLine
            Me.ComboBox1.Items.Add(linha)
        End While
        swreader.Close()
    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e sabes-me dizer como, por exemplo listar os valores do textfile para duas comboboxes? é que se faço para uma aquilo lê até ao fim e depois não sei voltar ao principio para ler a outra...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olha, podes-me fazer um favor e outro a ti?

Comenta a parte k tá a funcar do teu código e manda aí o source, acho k te consigo resolver, mas tenho de perceber melhor o código...

Aight?

Fico à espera... :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Imports System.IO

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'declara o swreader1 como um StreamReader
        Dim swreader1 As New StreamReader("C:\alunos.txt")

        'Faz um while enquanto o EndOfStream não for -1 ele adiciona tudo o que está separado por uma linha
        'à combobox denominada de cmbAlunoEliminado, mas como lê tudo até ao fim para preencher essa combobox
        'depois não lê para a outra
        Do While swreader1.EndOfStream = -1
            cmbAlunoEliminado.Items.AddRange(Split(swreader1.ReadToEnd, _
vbCrLf))
            cmbAlunos.Items.AddRange(Split(swreader1.ReadToEnd, _
vbCrLf))
            'fecha o StreamReader
            swreader1.Close()

        Loop


    End Sub


    Private Sub btnAddAluno_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddAluno.Click
        'declara a variavel swriter como um novo StreamWriter ao carregar no botao para adicionar o aluno
        Dim swriter As New StreamWriter("C:\alunos.txt", FileMode.Append)
        'se o TextBox denominado txtNomeAluno estiver em branco o erro irá soar...
        If txtNomeAluno.Text = "" Then
            MsgBox("Por favor digite o nome do aluno a ser adicionado.", MsgBoxStyle.Information, "Gestão de Alunos Virtuais")
        Else
            'caso contrário, ERA SUPOSTO, escrever o nome do aluno noutra linha, fazer refresh ao combobox
            'de alunos que no principio do código não preencheu, e por fim fechar o StreamWriter
            swriter.Write(vbNewLine & txtNomeAluno.Text)
            cmbAlunos.Refresh()
            swriter.Close()
            'Adicionaria também a informação numa StatusBar que eu acrescentei a dizer que o aluno teria sido adicionado,
            'e deixaria o TextBox em branco, para possíveis adições futuras.
            stBarAlunos.Text = "O aluno " & txtNomeAluno.Text & " foi adicionado!"
            txtNomeAluno.Text = ""
        End If

    End Sub

    Private Sub btnDelAluno_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelAluno.Click
        'declara-se de novo esta variavel ao carregar-se no botao de Eliminar
        Dim swriter As New StreamWriter("C:\alunos.txt", FileMode.Append)
        'se o texto da combobox for igual ao pré-definido, logo não haverá nenhum aluno seleccionado para ser eliminado
        'logo apresentará um erro
        If cmbAlunoEliminado.Text = "Escolha o aluno a ser eliminado:" Then
            MsgBox("Ainda não escolheu o aluno a ser eliminado.", MsgBoxStyle.Information, "Gestão de Alunos Virtuais")
        End If
        'aqui falta-me o resto do código para eliminar o aluno seleccionado
    End Sub
End Class

aqui está.... faz bom proveito  :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

cmbAlunoEliminado.SelectedItem.Remove

ou

Dim selected as Integer = cmbAlunoEliminado.SelectedIndex
cmbAlunoEliminado.Items.RemoveAt(selected)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ah remover do textfile é diferente!

vê este tópico:

http://www.portugal-a-programar.pt/index.php?showtopic=7071

depois o que tens de fazer é remover o elemento que queres tirar do textfile da(s) respectiva(s) array(s) e guardá-las de volta para o ficheiro de texto. Depois disso podes recarregar o conteúdo da combobox com o ficheiro de texto e vais ver que o nome já n aparece ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tu consegues eliminar da combo, nao consegues é eliminar do ficheiro...

Bem a solução está em reescreveres o ficheiro, eliminas o k está e crias outro com a nova info...

Não?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o prob é que eu depois nao sei criar de novo, o novo ficheiro com a nova informação... acho eu que nao sei..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem, eu faço assim:

            If File.Exists(FILE_NAME) = True Then
                File.Delete(FILE_NAME)
            End If
            Dim swriter As New StreamWriter(FILE_NAME, FileMode.Create)
            swriter.WriteLine(txtuser.Text)
            swriter.WriteLine(txtpass.Text)
            swriter.Close()

agora em vez de meter txtuser.text faz um while para escrever o k está na combo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora