Jump to content
williamjda

[Resolvido] [VB.NET] Como Fazer um TextBox receber dados como se fosse um ListBox?

Recommended Posts

williamjda

Tenho um formulário que que recebe informações de nota fiscal. o mesmo esta pronto para funcionar porem a uma alteração que pretendo fazer mas não sei por onde começar.

Este formulário recebe informações digitadas em seu textbox. E grava em um BD de bloco de notas txt. As ultimas informações aparecem em uma listbox. que quando selecionada a informação elas novamente aparecem nas textbox. (COMO SE FOSSE UMA AGENDA TELEFONICA ).

O que preciso.

os campos são:

Código    Descrição    Quatidade:

textbox    textbox      textbox

Quero que quando eu digitar o código do meu produto no textbox (Código ), o produto que esta no meu bd dentro do proprio visual basic em linha de comando ele apareça no textbox (descrição) automaticamente. Por que a informação  descrição não pode ser digitada pois demoraria muito tempo para preencher por isso criei um banco de dados: 

EXEMPLO  31155 é o código para " roduto designado"

Eu consegui fazer isso utilizando da seguinte forma:

MEU BD esta assim:

Public Class Form1

    ' INICIO DO BANCO DE DADOS NOTA FISCAL INDUSTRIALIZAÇÃO '
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        carrega_dados()
    End Sub
    Private Sub carrega_dados()
        produto(1) = "roduto designado"
        codigo(1) = "64115"
        produto(2) = "produto designado"
        codigo(2) = "58434"
        ' FIM DO BANCO DE DADOS NOTA FISCAL INDUSTRIALIZAÇÃO '
    End Sub

Codigo do TextBox (CÓDIGO)

Código    Descrição    Quatidade:

textbox    listbox        textbox

Preciso que isso seja feito apenas utilizando textbox. Veja o código que usei e deu certo com listbox.

Private Sub TextBox7_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox7.TextChanged
        Dim achou As Boolean
        If Len(TextBox7.Text) >= 5 Then
            If Len(TextBox7.Text) <= 0 Then
            End If
            For t = 1 To 1
                If codigo(t) = TextBox7.Text Then
                    ListBox2.Items.Add(produto(1))
                    achou = True
                End If

            Next t
            If achou = False Then
                MsgBox("Produto não cadastrado")
            End If
            ListBox2.Text = ""
        End If

    End Sub

ele retorna o valor do meu bd  porem se o usuário digitar o codigo de outro produto no mesmo campo e quiser trocar não seria possível por que uma vez que o código entra no listbox ele vai criando linhas e não podem ser apagadas. espero que tenha dado para entender o meu problema. ( cada textbox representa uma linha da minha nota que no total são 9, mas com as Listbox cada linha equivale a um montão de linhas por que a listbox fica adicionando linhas dentro de is mesma.

Fico no aguardo de sua resposta e desde já agradeço.Sem mais;

William  :thumbsup:

Share this post


Link to post
Share on other sites
MSOlhao

Não sei se estou a perceber a tua questão, mas se o que pretendes é inserir os produtos todos numa TextBox  podes fazer isto dentro do Loop

For i = 0 To codigo.Length - 1
    If codigo(i) = TextBoxCodigo.Text Then
            TextBoxDescricao.Text &= produto(i) & vbCrLf
            achou = True
        Exit For
    End If
Next

Se por outro lado o que queres é criar uma nova TextBox por cada vez que o código é executado tens de criá-las através de código é um bocadinho mais trabalhoso.

Share this post


Link to post
Share on other sites
williamjda

Não sei se estou a perceber a tua questão, mas se o que pretendes é inserir os produtos todos numa TextBox  podes fazer isto dentro do Loop

For i = 0 To codigo.Length - 1
    If codigo(i) = TextBoxCodigo.Text Then
            TextBoxDescricao.Text &= produto(i) & vbCrLf
            achou = True
        Exit For
    End If
Next

Se por outro lado o que queres é criar uma nova TextBox por cada vez que o código é executado tens de criá-las através de código é um bocadinho mais trabalhoso.

Amigo: Usei o código que me passou porem não deu erro mas também não deu certo. Talvez eu tenha feito algo errado se poder me esclarecer.

O que eu preciso?

Meu formulário é assim:

CódigoEC                                          Descrição EC                                                                            QTD EC

-------------------------------------------------------------------------------------------------------------------------------------

|  Listbox7    |                                ListBox8                                                                                |  ListBox9 |

-------------------------------------------------------------------------------------------------------------------------------------

|  Listbox10  |                                ListBox11                                                                              | ListBox12|

-------------------------------------------------------------------------------------------------------------------------------------

e assim sucessivamente até o ListBox34

Quando o usuario digitar o código EC no listBox7 a informação deverá aparecer no listBox8 (DescriçãoEC) e assim sucessivamente com o outros campos Código EC e Descrição EC não se preocupe com a QTD EC pois ela ser digitada manualmente. creio que se eu resolver uma linha as outras é só copiar e colar.

Os código dos produto e o produtos estão no próprio VB.

Desta forma:

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
carrega_dados()
End Sub
Private Sub carrega_dados()
produto(1) = "Produto designado"
codigo(1) = "64115"
produto(2) = "Produto designado"
codigo(2) = "58434"
' FIM DO BANCO DE DADOS NOTA FISCAL INDUSTRIALIZAÇÃO '
End Sub

Resumindo se eu digitar no ListBox7 (CódigoEC) 64115 devera aparecer no ListBox8 (DescriçãoEC) a informação:roduto designado

Fico no aguardo de uma resposta e de sua ajuda, pois necessito disto com muita urgência e é de extrema importância. Desde já agradeço.

Sem mais;

Williamjda :thumbsup:

Share this post


Link to post
Share on other sites
MSOlhao

Viva,

Primeiro que tudo vamos deixar de parte esse Arrays simples e vamos usar Dicionários (Dictionary) pois vai-te facilitar imenso a vida.

Com o Dictionary o seu método carrega_dados() vai ficar assim:

Private produtos As Dictionary(Of String, String)
Private Sub CarregaDados()

        produtos = New Dictionary(Of String, String)

        produtos.Add("1", "Produto 1")
        produtos.Add("2", "Produto 2")

        ' FIM DO BANCO DE DADOS NOTA FISCAL INDUSTRIALIZAÇÃO '
End Sub

Para o evento TextChanged das TextBoxes o código fica assim:

Dim achou As Boolean
If Len(TextBox7.Text) >= 5 Then
    If produtos.ContainsKey(TextBox7.Text) Then
        TextBox8.Text = produtos.Item(TextBox7.Text)
        achou = True
    End If
End If

If achou = False Then
    MsgBox("Produto não cadastrado")
End If

Share this post


Link to post
Share on other sites
williamjda

Olá ; desculpe a amolação porem agora ele da a seguinte mensagem. Não apresenta nenhum erro porem falta uma referencia que não consegui fazer. E quando o cursor esta no campo textBox7 e cada vez que digito um numero do meu código ele fica aparecendo a mensagem do msgBox. Assim que abre o formulário ela ja aparece.

" Referencia de objeto não definida para uma instância de um objeto."

Ai ele aponta a seguinte linha de comando com a falta da referencia:

      If produtos.ContainsKey(TextBox7.Text) Then  ???????

               

Share this post


Link to post
Share on other sites
MSOlhao

Deves-te estar a esqueçer disto no método CarregaDados()

produtos=New Dictionary(Of String, String)

Share this post


Link to post
Share on other sites
MSOlhao

Invoque o método CarregaDados()  no Form1_Load()

Deixe-me dar-lhe um conselho, use um For Each Loop para Limpar todas essas textboxs.

Share this post


Link to post
Share on other sites
williamjda

Amigo muito obrigado mesmo pela sua atenção. Você não só me ajudou como teve paciência comigo.

Fiquei muito satisfeito com a qualidade de seu atendimento e admirado pela sua inteligência.

Muito obrigado mesmo.

Um grande abraço e no que eu puder ajudar no fórum estarei disponível. Minha especialidade é Servidores (Windows Server 2008 ) e outros Sistemas Operacionais.

Estarei disponível sempre que precisarem.

Att;

Williamjda

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.