[VB] Meerdere waarden uit listbox selecteren

Pagina: 1
Acties:

  • nenne
  • Registratie: Juni 2004
  • Laatst online: 06-06-2024
Voor de gemiddelde tweaker een simpel antwoord op een waarschijnlijk simpel vraagstuk:

Ik heb 2 listboxes. Listbox lb1 bevat waarden, lb2 bevat waarden die uit lb1 zijn geselecteerd. Bij lb1 staat multiselect op 2, oftewel men kan meerdere waarden selecteren.

Nu wil ik bij het selecteren van meerdere waarden deze toevoegen aan lb2 (geen probleem), en tegelijkertijd verwijderen uit lb1 (voor mij wel een probleem). Ik heb de volgende code:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub cmdSelecteer_Click()

  Dim iNumitm As Integer
  Dim x As Integer
  
  iNumitm = lstBeschikbareTabellen.ListCount
  
  'alle geselecteerde items in lstGekozenTabellen voegen
  'alle geselecteerde items verwijderen uit lstBeschikbareTabellen

  For x = 0 To lstBeschikbareTabellen.ListCount - 1
    
    If lstBeschikbareTabellen.Selected(x) Then
        lstGekozenTabellen.AddItem lstBeschikbareTabellen.List(x)
        lstBeschikbareTabellen.RemoveItem x
    End If
    
  Next x

End Sub


Het probleem waar ik tegen aanloop is de error "invalid property array index", aangezien de ListCount bij het verwijderen 1 kleiner wordt, terwijl de ListCount uit de For-lus wordt onthouden.

Wie weet een oplossing voor mijn probleem?

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:33
Van achter naar voor ipv van voor naar achter deleten.

https://fgheysels.github.io/


  • nenne
  • Registratie: Juni 2004
  • Laatst online: 06-06-2024
whoami schreef op 10 juni 2004 @ 12:07:
Van achter naar voor ipv van voor naar achter deleten.
Zou je iets specifieker kunnen zijn in je antwoord ajb?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Delphi:
1
2
3
4
5
6
For lstBeschikbareTabellen.ListCount - 1 to 0
    If lstBeschikbareTabellen.Selected(x) Then
        lstGekozenTabellen.AddItem lstBeschikbareTabellen.List(x)
        lstBeschikbareTabellen.RemoveItem x
    End If
Next x

Zoiets iig...

[ Voor 5% gewijzigd door NMe op 10-06-2004 12:12 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:33
Hoe kan ik nog specifieker zijn?
Ipv van het eerste element naar het laatste te lopen, moet je van het laatste naar het eerste loopen om je items te verplaatsen en te deleten.

Denk er eens over na, en je zal wel zien waarom dat dat nodig is.

https://fgheysels.github.io/


  • bitflusher
  • Registratie: September 2001
  • Laatst online: 24-05 20:34

bitflusher

flushed die *** pc

dat mag je ook ff toelichten whoami.

eigenlijk is het heel logisch als je een veld verwijderd word je index opnieuw opgebouwd, dan kom je op een kleinere lijst uit en gaat hij dus verder door dan je lijst lang is, tevens zal hij dingen overslaan.

als je van achter naar voor werkt word je list wel korter maar dat is alleen in het stuk wat je al gehad heb.

als je (bijvoorbeeld voor behoud van de volgorde) toch van voor naar achter wilt werken zul je 2 lussen moeten maken. een copy lus en een remove lus

****************************************************************


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:33
bitflusher schreef op 10 juni 2004 @ 12:15:
dat mag je ook ff toelichten whoami.
Waarom? Als men zelf even logisch nadenkt, dan had men die conclusie die jij neergezet hebt ook wel zelf kunnen trekken.

https://fgheysels.github.io/


  • nenne
  • Registratie: Juni 2004
  • Laatst online: 06-06-2024
Mijn dank voor de respons en de uitleg.

Voor de volledigheid het juiste stukje code, mochten er meer Newbies zijn die er niet uit komen:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
    
  'alle geselecteerde items in lstGekozenTabellen voegen
  For x = lstBeschikbareTabellen.ListCount - 1 To 0 Step -1
    
    If lstBeschikbareTabellen.Selected(x) Then
        lstGekozenTabellen.AddItem lstBeschikbareTabellen.List(x)
        lstBeschikbareTabellen.RemoveItem x
    End If
  
  Next x


_/-\o_
Pagina: 1