Usuário com melhor resposta
Trabalhando com listbox

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.
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
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
-
-
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.
-
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 -
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.
-
-
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.
-
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
-
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 ?
-
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
-
-