none
Trabalhando com listbox RRS feed

  • Pergunta

  •  Bom dia amigos ,

    estou com problemas para executar algumas tarefas em uma das funçoes do meu aplicativos.

    Meu aplicativo conta com 15 textbox que exportam valores para uma unica linha do listbox;

      entre os valores existe uma "," para separar os numeros em pares.

     o codigo esta assim :

     ListBox1.Items.Add(t1.text & "," & t2.text ....) e assim por diante até o t15.text ...

    os textbox  10 , 11 , 12 , 13 , 14 , 15 recebem um de cada vez começando pelo ultimo textbox 8 numeros randomicos totalizando 8 linhas diferentes. Esses valores randomicos sao gerados atraves da função :

     Dim gera as random = New random

     dim recebevalor as integer

     recebevalor = gera.next(1, 25)

    t15.text = recebevalor

     

      agora o problema é o seguinte , eu preciso que os valores gerados pela função gera nao se repitam e nao sejam iguais ao valores das demais caixas de texto.

       1 linha do listbox armazena os 15 valores , entao acredito que seja possivel  que antes do valor ser enviado ao item.add , seja verificado se o valor ja nao pertence a nenhuma linha do listbox. 

      nao estou conseguindo fazer isso , ja tentei fazer um for pra percorrer a lista mais nao estou tendo exito.

     

     conto com a colaboração de todos,um abraço.

     

     

    sexta-feira, 26 de novembro de 2010 00:52

Respostas

  • Você pode fazer um loop para gerar o valor da variavel random enquanto o valor seja igual a um dos textbox. Quando ele for diferente, ou seja, não existir em nenhum textbox, ele sairá do loop e vc adiciona no list.

    Algo do tipo:

        Dim gera As Random = New Random
        Dim recebevalor As Integer
        Dim continua As Boolean
    
        Do
          continua = True
          recebevalor = gera.Next(1, 25)
          For Each valor As Control In Me.Controls
            If TypeOf valor Is TextBox Then
              If recebevalor = valor.Text.Trim Then
                continua = False
                Exit For
              End If
            End If
          Next
        Loop While Not continua
    
        'Adiciona o valor de recebevalor no listbox

    • Marcado como Resposta Wellington Kruk sábado, 4 de dezembro de 2010 15:59
    quinta-feira, 2 de dezembro de 2010 13:12

Todas as Respostas

  • Wellington,

    Já tentou utilizar o SuaListBox.Items.Contains(valorParaVerificarSeJaExiste)?


    André Alves de Lima
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    • Sugerido como Resposta Vander Pina sábado, 27 de novembro de 2010 11:03
    sexta-feira, 26 de novembro de 2010 11:53
    Moderador
  • Você pode guardar os valores a serem enviados em uma vetor e antes de chamar o item.add você verifica neste vetor se já existe o valor. Se existir, você não chama o item.add, caso não exista, você chama o item.add
    sexta-feira, 26 de novembro de 2010 13:39
  •  bom dia andre...

    nao preciso saber se o valor ja existe por exemplo o valor "10" , eu preciso saber se a linha inteira ja existe.

    a linha completa fica assim :

      meulist.items.add(Txtbox1.text & "," & txt2.text ...) e assim por diante ate o txt15.

     a linha ficaria assim (exemplo) :

       1,2,3,4,5,6,7,8,9,10,1,12,13,14,15 , porem , os valores 15,14,13,12,11, 10 sao valores recebidos de uma variavel que gera numeros randomicos entre 1 e 25.

     

      o textbox15 tem capacidade para gerar  14 linhas diferentes , pois essa função de add e feita por um timer que é pausado por outro timer que analiza se o total de linhas ja é 14 , se for ele para e depois inicia o outro timer que faz com que o box14 comece a gerar outras 14 linhas distintas e o valor do box15 se torne fixo.  e assim por diante ate o box10...

     

     preciso gerar todas essas combinaçoes (84 no total , sem repetição) ... porem estou com 2 problemas ... um para evitar as repetiçoes e outro pra organizar o sorted.

     

     preciso que a lista seja organizada de 1 ate 25  (crescente) porem quando uso o sorte no modo true , ele faz o seguinte : organiza os valores em 1,10,11,...19,2,20,21,.....

      espero que tenham entendido e possam me ajudar pois estou tendo uma grande dificuldade em relaçao a isso.

     

     

     

     

    sábado, 27 de novembro de 2010 00:48
  • Olá Wellington, tente usar este código:

    Dim novovalor As String = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15"
    Dim valor_existe As Boolean = False
    
    For Each item As String In Me.ListBox1.Items
       If String.Equals(item, novovalor) Then
         'O novo valor já existe no listbox e não insere
         valor_existe = True
       End If
    Next
    
    If Not valor_existe Then
       Me.ListBox1.Items.Add(novovalor)
    End If
    Você substitui a variável novovalor pelo seu valor gerado
    segunda-feira, 29 de novembro de 2010 12:55
  •  Bom dia amigo.

     entao , seu codigo era exatamente o que eu precisava porem , ainda preciso fazer um ajuste :

     alem do novovalor ser comparado , preciso que seja comparado tambem os valores de 15 listbox .

     eu tentei fazer da seguinte maneira :

     

      novovalor = numerogerado & t1.text & t2.text .... até t15.text

     porem nao deu certo , o que ja era de se esperar.


      alem dessa comparação com o valor gerado preciso que compare com os outros 15 textbox ...

     

    resolvi facilitar um pouco minha situação :

     

    vou por todos os valores possiveis entre 25 e 1 que nao estejam nos textbox e o gerado em um outro listbox... apartir desse listbox vou sortear os valores para serem mandados ate um espaço determinado da linha para que seja adicionado aos demais valores , e depois de selecionado o valor na lista secundaria ele remove da lista , evitando a duplicação dos items no listbox principal.

     mais para continuar com meu projeto preciso apenas conseguir realizar a função de comparação acima citada.

      caso consiga me dar esse ultimo esclarecimento ficarei muito grato !

    um abraço.

     

     

    terça-feira, 30 de novembro de 2010 16:58
  • Deixa ver se eu entendi. Os 15 valores gerados nos textbox devem ser 15 números distintos, não podendo ter dois numeros 11, por exemplo?
    terça-feira, 30 de novembro de 2010 18:15
  •  nao , assim :

    nao podem ter 2 numeros iguais  na mesma linha do listbox ...  por exemplo ,  eu preciso que nao gere os valores do t15 ate t1  na variavel responsavel pelos numeros randomicos.

     ali em  cima voce me passou um codigo que funcionou perfeitamente , porem , agora alem de comparar o valor da listbox preciso comparar com os 15 listbox , ou seja , se os valores dos 15 list forem :   1,2,3,4,5,6,7,8,9,10,11,12,13,14,15   , eu preciso que os numeros gerados nao sejam os mesmos dos textbox ...  ou seja , sobrariam apenas  o   16 17 18 19 20 21 22 23 24 25 ^^    

     

     resumindo : comparar o valor da variavel random  com os valores dos 15 textbox . caso o valor ja esteja em um dos text , gera novo valor. caso nao esteje , adiciona no list.

    quarta-feira, 1 de dezembro de 2010 22:01
  • Você pode fazer um loop para gerar o valor da variavel random enquanto o valor seja igual a um dos textbox. Quando ele for diferente, ou seja, não existir em nenhum textbox, ele sairá do loop e vc adiciona no list.

    Algo do tipo:

        Dim gera As Random = New Random
        Dim recebevalor As Integer
        Dim continua As Boolean
    
        Do
          continua = True
          recebevalor = gera.Next(1, 25)
          For Each valor As Control In Me.Controls
            If TypeOf valor Is TextBox Then
              If recebevalor = valor.Text.Trim Then
                continua = False
                Exit For
              End If
            End If
          Next
        Loop While Not continua
    
        'Adiciona o valor de recebevalor no listbox

    • Marcado como Resposta Wellington Kruk sábado, 4 de dezembro de 2010 15:59
    quinta-feira, 2 de dezembro de 2010 13:12
  • obrigado , certinho ... mais aproveitando o espaço preciso de mais uma ajuda :T

      cada linha do meu listbox e formada da seguinte maneira :

      txt1 & "," & txt2 & "," & tx3 ..... ate t15 ...

    entao a linha fica assim :

     

      1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

     

     o valor maximo que a linha pode chegar é 25 ...

    quero saber como posso organizar os valores de forma crescente , pois quando deixo o sorted da listbox ativa , nao esta funcionando corretamente.

     

     preciso que aconteça isso :

     a linha :

    1,2,3,4,5,6,7,10,9,15,16,14,22,20,17

    eu preciso que ela fique assim :

    1,2,3,4,5,6,7,9,10,14,15,16,17,20,22

     

     é possivel ?

    quinta-feira, 2 de dezembro de 2010 15:29
  •     Dim valores(14) As Integer
        Dim i As Integer = 0
    
        For Each controle As Control In Me.Controls
          If TypeOf controle Is TextBox Then
            valores(i) = controle.Text
            i += 1
          End If
        Next
    
        Array.Sort(valores)
    


    A variável valores possui todos os 15 numeros ordenados. Para pegar cada um na ordem, basta usar isto:

        For Each valor As Integer In valores
          'aqui vc pega os valores ordenados um a um
        Next
    

    quinta-feira, 2 de dezembro de 2010 18:25
  •  obrigado por todas as ajudas ... ja marquei seu post como resposta.  um abraço !
    sábado, 4 de dezembro de 2010 16:00
  • Precisando, é só perguntar
    segunda-feira, 6 de dezembro de 2010 12:26