Ir para conteúdo
Fórum Script Brasil
  • 0

Adicionar Item No Listbox


ramon

Pergunta

è parecido mais não é isso

No load do form eu tenho

Private Sub Form_Load()

List1.AddItem "Carlos araujo-------Goleiro"

List1.AddItem "Rodrigo-------------Zagueiro"

List1.AddItem "Paulo Roberto-------Meio"

List1.AddItem "Ramom lima----------Atacante"

End Sub

Este tracos ---------- estou simulando um espaco pois aqui no forum não aceita mais de um espaco em branco

Então eu quero adicionar um nome do jogador (escrevo no textbox Pele) e escolho um optionbutom a posição dele Atacante

Então tera que aparecer no listbox o nome do jogador espaco em branco seguido da posicão dele

Ficando

Pelé-----------Atacante

Isto em baixo da linha ramon ---------atacante

Se eu escolher goleiro fica embaixo da linha que tem a posicao goeliro

Então o que eu quero é saber como adicionar este item

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Veja bem, o segundo parâmetro do método AddItem permite que você especifique a posição em que o item será inserido. Além disso, como você já deve saber, a propriedade ListIndex guarda a posição do item selecionado atualmente. Com essas duas dicas já dá pra fazer o que você quer.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Veja bem, o segundo parâmetro do método AddItem permite que você especifique a posição em que o item será inserido. Além disso, como você já deve saber, a propriedade ListIndex guarda a posição do item selecionado atualmente. Com essas duas dicas já dá pra fazer o que você quer.

Abraços,

Graymalkin

Cara não consegui fazer sad.gif

Tentei e não deu

Pesso mais uma vez para você colocar um exemplo pois realmente to com dificuldade

Na boa coloca um exemplo de como fazer isso

Link para o comentário
Compartilhar em outros sites

  • 0

Imagine que você tem 4 itens na listbox e quer inserir um novo item na terceira posição(terceira linha). Lembrando que os índices dos itens começam do 0, você faria:

List1.AddItem "novo item", 2
Isso porque 2 é o terceiro item (0, 1, 2). Agora se você quer inserir um item abaixo do item que está atualmente selecionado basta saber qual é o índice do mesmo e somar +1. Podemos comprovar qual o índice do item selecionado verificando a propriedade ListIndex. Um exemplo:
Msgbox List1.ListIndex
Marque qualquer item e use o código acima para ver o índice do item marcado. Resumindo tudo agora, o código que você quer é:
List1.AddItem "novo item", List1.Index+1

Entendido?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Assim não serve para o meu caso

Pois imagine que eu tenha 10 itens com nomes diferentes porem 4 posições definidas (Goleiro, zagueiro, Meio e Atacante)

Ramom Lourenco        Goleiro
Ramom Louco           Goleiro
Ramom sssssss         Zagueiro
Ramom ddddddk         zagueiro
Cicalno 1             zagueiro
Ciclano 2             Meio
Fulano 1              Meio
Fulano 2              Atacante
Fulano 3              Atacante
Fulano 4              Atacante

Então cada vez que eu adicionar um nome de jogador eu terei apenas 4 posições para definir aonde ele vai aparecer no listbox (que no caso serão os 4 optionbutton)

Escrevo no textbox Fulano 5 e escolho o optionbutton Zagueiro.

Terá que aparecer no listbox: Fulano 5 Zagueiro na linha que tem a palavra Zagueiro.

você no exemplo me indicou a posição por linha 0,1,2 e na verdade eu precizo definir posição que vai aparecer no listbox pelo funcao do jogador (Goleiro, Zagueiro, Meio e Atacante)

Aeh que ta a minha duvida??

Link para o comentário
Compartilhar em outros sites

  • 0

O problema é que a "função" do jogador é uma abstração que só você tem; para a listbox não importa o que está escrito em cada linha (e os elementos dela só existem em linhas e classificados por linhas). No entanto, isso não é, de fato, um problema. Você pode muito bem percorrer todos os itens da listbox procurando pela "função" e pegar a posição imediatamente posterior à última encontrada linha, cuja a "função" foi encontrada, e inserir o elemento.

Em todo o caso você terá sempre que trabalhar com os índices das linhas, mesmo que queira inserir um elemento após outro baseando-se no texto (que é o mesmo que inserir um elemento na posição posterior à posição do elemento procurado). Isso é o que você deve compreender: você fala em "funções", em conteúdos das linhas, mas a listbox só entende os índices das linhas. Portanto, cabe a você criar uma maneira de "traduzir" uma coisa para a outra de forma transparente. Ou seja, tanto faz se você quer chamar a linha de "zagueiro" ou "atacante", o importante é que você se referencie a mesma de acordo com seu índice do elemento.

Com tudo que já foi passado aqui é possível fazer o que você quer. Tente aí, e se não conseguir poste aqui a sua tentativa e eu tento ajudar-lhe.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Cara infelizmente não consigui entender

Fiz de tudo e não deu

Agora fiquei mais confusso ainda

Da para você colocar um exemplo dos codigos e se possivel uma explicação?

Link para o comentário
Compartilhar em outros sites

  • 0

Segue um exemplo, incompleto é claro (já que não sei os nomes dos seus optionbuttons e nem como você está formatando o nome do jogador e sua posição ao inserir). Veja (delimitei com ** os lugares onde você deve completar com seu código):

    Dim item As String
    posição = ** nessa variável deve entrar o texto da OptionButton escolhida ("Goleiro", "Atacante", "Zagueiro" ou "Meio") **
    For i = 0 To List1.ListCount - 1
        item = List1.List(i)
        pos = InStr(1, item, "  ")
        positem = Trim(Mid(item, pos + 1, Len(item) - pos))
        If positem = posição Then
            ultimo = i
        End If
    Next i
    List1.AddItem ** nome do novo jogador e sua posição **, ultimo + 1

(Repare que na explicação abaixo as variáveis estão em itálico para não ter confusão)

Esse exemplo acima percorre todos os itens da listbox verificando se a posição (positem) é igual a posição escolhida (posição). Caso positivo, a variável ultimo é atualizada com a posição (linha) do item. Quando o loop tiver terminado a variável ultimo estará com a posição (linha) da listbox em que apareceu pela última vez a posição.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu Graymalkin funcionou certinho.

Mas tenho mais uma duvida

Quando a minha litsbox estiver vazia e eu adicionar um item usando o seu exemplo vai dar um erro, pois não tem nehhum item né.

Como resolver isso? wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Mas, se ela está vazia como você quer organizar? O primeiro item que aparecerá na ListBox será qualquer um deles. Após inserir as quatro posições (uma de cada) é que ela passará a ficar organizada a medida que você adiciona as demais.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Mas você não entendeu

Eu sei que não tem nenhum item

digamos que eu seleciono Atacante

Vai aparecer Atacante

Seleciono zagueiro vai aparecer zagueiro

Ficando

Atacante

Zagueiro

Agora seelciono meio

fica

Atacante

Meio

Zagueiro

Mas ordem tá errada ela aparece conforme eu seleciono

Eu quero que fique

Goleiro

Zagueiro

Meio

Atacante

Como resolver isso???

tá ae o meu codigo


Private Sub Command1_Click()

  nome = Text1.Text
  If Option1.Value Then
  posicao = Option1.Caption
  ElseIf Option2.Value Then
  posicao = Option2.Caption
  ElseIf Option3.Value Then
  posicao = Option3.Caption
  ElseIf Option4.Value Then
  posicao = Option4.Caption
  End If
      
   
If List1.ListCount Then
   For i = 0 To List1.ListCount - 1
       item = List1.List(i)
       pos = InStr(1, item, "  ")
       positem = Trim(Mid(item, pos + 1, Len(item) - pos))
       If positem = posicao Then
           ultimo = i
       End If
   Next i
   
    List1.AddItem nome + "   " + posicao, ultimo + 1
   
Else
      List1.AddItem nome + " f  " + posicao
     
End If
     
End Sub


Link para o comentário
Compartilhar em outros sites

  • 0

Não, a ordem não está errada. Estaria errada se ela fosse contrária ao que diz o algoritmo, o que não é o caso. Mas, bem complicadinho esse seu esquema, hein? A idéia de agrupar todos eles eu até compreendo (e encorajo isso), mas já essa de definir a ordem acho meio desnecessária. Vou tentar pensar em algo para resolver isso, mas não garanto nada.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Sim, você pode fazer com uma listview também. Todavia o "problema" (reitero que não o considero como tal) da ordem permanecerá. Essa semana dei um exemplo de inserção de dados em uma listview; dê uma olhada nos últimos tópicos.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Ramon tem varios jeitos para resolver isso!!!

Uma simples seria usar uma Collection e uma variavel interira ambos def como Private no topo do Form. Na Collection você armazena o valor da posicao cada vez q inserir um item no List1, assim testando a Collection você decide onde inserir o novo item na List1.

To sem tempo para montar um exemplo, mas a galera do forum pode te ajudar com esta dica...

Abraços

Maslack

Link para o comentário
Compartilhar em outros sites

  • 0

Ramon,

Tente pensar, da forma mais lógica possível, como deveria ser a inserção de um (apenas um) item na listbox e quais as situações que deverão envolver sua inserção. Mas, antes, leia isso de novo:

O problema é que a "função" do jogador é uma abstração que só você tem; para a listbox não importa o que está escrito em cada linha (e os elementos dela só existem em linhas e classificados por linhas). No entanto, isso não é, de fato, um problema. Você pode muito bem percorrer todos os itens da listbox procurando pela "função" e pegar a posição imediatamente posterior à última encontrada linha, cuja a "função" foi encontrada, e inserir o elemento.

Em todo o caso você terá sempre que trabalhar com os índices das linhas, mesmo que queira inserir um elemento após outro baseando-se no texto (que é o mesmo que inserir um elemento na posição posterior à posição do elemento procurado). Isso é o que você deve compreender: você fala em "funções", em conteúdos das linhas, mas a listbox só entende os índices das linhas. Portanto, cabe a você criar uma maneira de "traduzir" uma coisa para a outra de forma transparente. Ou seja, tanto faz se você quer chamar a linha de "zagueiro" ou "atacante", o importante é que você se referencie a mesma de acordo com seu índice do elemento.

Se você conseguir imaginar uma maneira lógica de se fazer isso, transformo em código pra ti.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

- Carregar um listbox com diversos jogadores, sendo que eles precisam estar ordenados por NOME e agrupados por função(Goleiro, Zagueiro,etc...).

- Os nomes devem estar alinhados, simulando duas colunas: | NOME | FUNÇÃO |.

EX:

NOME................FUNÇÃO

Andre................Goleiro

Carlos...............Goleiro

Mario.................Zagueiro

Paulo.................Zagueiro

Bruno.................Meio

Everaldo.............Atacante

Link para o comentário
Compartilhar em outros sites

  • 0

Até aí está praticamente tudo feito (só falta ordenar por nome, o que é, relativamente, fácil). No entanto, você não incluiu nesse caso acima a idéia de que as funções também estarão em uma determinada ordem. É em relação a isso que eu falava.

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Mas ordem esta no exemplo acima

Estive pensando em fazer o seguinte

Na minha list tem 4 itens que representam a funcão do jogador

Ora se a lista não pode ser ordenada atraves de nomes(da segunda coluna) então por que não acrescentar um numero no nome do jogador

1- Andre................Goleiro

1- Carlos...............Goleiro

2- Mario................Zagueiro

2- Paulo................Zagueiro

3- Bruno................Meio

4- Everaldo.............Atacante

Ai esta a ordem

Sendo que teria que ter um jeito de remover estes numeros usando uma lista invisivel eu acho!

Agora ta ai a ideia agora como transformar isto em código?

Link para o comentário
Compartilhar em outros sites

  • 0

Sim, a ordem está lá. Mas, você não explicou como ela será feita durante a inserção. E eu já disse: não existe uma segunda coluna. Isso é uma abstração que nós temos, para a listbox aquilo é só uma linha com informações e ela não se importa com o que quer que esteja lá.

Você quer a ordem de Goleiro, Zagueiro, Meio e Atacante, certo?

Pois bem, se você colocar primeiro um Atacante, e for inserir um Goleiro depois, este deve entrar antes do Atacante. Ainda nesse caso, se você for inserir um Meio ele terá de entrar entre os dois já existentes. Por fim, colocando o Zagueiro, ele terá de entrar entre o Goleiro e o Meio.

Agora, vamos pensar em outra possibilidade: primeiro você colocou o Meio, depois vai colocar um Zagueiro, que deverá entrar antes do Meio. Colocando um Goleiro, este deverá entrar antes do Zagueiro. E, por fim, colocando um Atacante, este deverá entrar depois do Meio.

E existem ainda outras possibilidades. É isso que você ainda não entendeu.

A idéia do número, sendo fixo:

1 - Goleiro

2 - Zagueiro

3 - Meio

4 - Atacante

Vai dar certo, mas isso aí já está praticamente pronto.

Você não consegue alterar para que ele inclua o número na frente?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Você quer a ordem de Goleiro, Zagueiro, Meio e Atacante, certo?

Exatamente biggrin.gif

Agora, vamos pensar em outra possibilidade: primeiro você colocou o Meio, depois vai colocar um Zagueiro, que deverá entrar antes do Meio. Colocando um Goleiro, este deverá entrar antes do Zagueiro. E, por fim, colocando um Atacante, este deverá entrar depois do Meio.

Exatamente tongue.gif

E existem ainda outras possibilidades. É isso que você ainda não entendeu.

Quais as outras possibilidades? unsure.gif

A idéia do número, sendo fixo:

1 - Goleiro

2 - Zagueiro

3 - Meio

4 - Atacante

Vai dar certo, mas isso aí já está praticamente pronto.

Você não consegue alterar para que ele inclua o número na frente?

isso eu consigo a minha duvida neste cajo e se da para criar uma list invisivel colocando estes dados numerados e depois passar para outra listbox sem os numeros? cool.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Se tenho 4 elementos diferentes, as maneiras possíveis de arranjá-los (em grupos de 4) dá-se pela fórmula 4! / (4-4)! o que resulta em 24 combinações possíveis.

Por que colocar em uma listbox invisível e depois colocá-los na outra? unsure.gif

De qualquer forma, se você tivesse testado isso veria que dá certo. Exemplo:

    List1.Visible = False
    List1.AddItem "teste"
    List2.AddItem List1.List(0)

A primeira listbox fica invisível (claro que você pode mudar a propriedade dela em tempo de desenvolvimento), um item é adicionado e na segunda listbox adiciona-se o item da primeira (que está invisível).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...