switchen van listbox

Status
Niet open voor verdere reacties.

weswillem

Gebruiker
Lid geworden
8 nov 2011
Berichten
310
Volgende uitdaging, maar ik zie kennelijk wat over het hoofd.
De bedoeling is dat ik een listbox1 heb die gevuld wordt met diverse taken.
Met de knop Toevoegen moet één of meerdere items worden toegevoegd aan
listbix2, m.d.v. dat er geen dubbele in mag komen.
De mogelijkheid moet ook zijn dat een item uit listbox2 terug gezet kan worden
met de knop Verwijderen

Ik maak gebruik van VS2005

Code:
Private Sub Listboxvullen()
        Dim irij As Integer
        Dim iAantalItems As Integer

        ds.Clear()
        Try
            Dim ds As DataSet = New DataSet
            mySQL = "SELECT * from TaakItems"
            da = New OleDb.OleDbDataAdapter(mySQL, Conn)

            da.Fill(ds, "Zorgboerderij")
            Dim iAantal As Integer = ds.Tables("Zorgboerderij").Rows.Count
            ' MsgBox(iAantal)
            iAantalItems = 0
            i=0
      
            For i As Integer = 0 To iAantal - 1 Step 1
                ReDim Preserve IdList(iAantalItems)
                ReDim Preserve ValueList(iAantalItems)

                IdList(iaantalitems)= ds.Tables(0).Rows  (i).Item(0)
                ValueList (iaantalitems)= ds.Tables(0).Rows(i).Item(1)

                iAantalItems = iAantalItems + 1
        Next i
         ListBoxBron.List = ValueList
        Catch ex As Exception
            MessageBox.Show(ex.Message, "ERROR Listboxvullen", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            Conn.Close()
            da.Dispose()
        End Try

    End Sub

    Private Sub cmdToevoegen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdToevoegen.Click
        Dim i As Integer
        Dim SelectedValue As String
        Dim j As Integer
        Dim KomtAlVoor As Boolean

        For i = 0 To ListBoxBron.Items.Count - 1 Step 1
            If (ListBoxBron.Items(i)) Then
                ' geen dubbele items toestaan in de result listbox
                SelectedValue = ListBoxBron.Items(i)
                KomtAlVoor = False
                For j = 0 To ListBoxResult.Items.Count - 1
                    If ListBoxResult.Items(j) = SelectedValue Then
                        KomtAlVoor = True
                        Exit For
                    End If
                Next j
                If Not KomtAlVoor Then ListBoxResult.Items.Add(SelectedValue)
            End If
        Next i
        'If ListBoxResult.ListCount > 0 Then cmpOplaanTaken.Enabled = True
    End Sub

    Private Sub cmdVerwijderen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdVerwijderen.Click
        Dim i As Integer
        For i = 0 To ListBoxResult.Items.Count - 1
            If ListBoxResult.GetSelected(i) Then
                ListBoxResult.Items.Remove(i)
            End If
        Next
        'If ListBoxResult.ListCount = 0 Then cmpOplaanTaken.Enabled = False
    End Sub
 

Bijlagen

  • switchlist.jpg
    switchlist.jpg
    55,2 KB · Weergaven: 28
Laatst bewerkt:
Hoi,

Klein vraagje: Kan je niet gewoon beter de items uit de listbox1 halen als ze al in listbox2 zitten? Dan kunnen ze sowieso niet een tweede keer toegevoegd worden en is dat ook voor de gebruiker duidelijk.

MartinJM

[edit]
Zelf zou ik het zo doen:
[/edit]
[CPP] Private Sub BtnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAdd.Click
For i As Integer = 0 To ListBoxBron.SelectedItems.Count - 1 Step 1
ListBoxResult.Items.Add(ListBoxBron.SelectedItems(i))
ListBoxBron.Items.Remove(ListBoxBron.SelectedItems(i))
Next
End Sub

Private Sub Remove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Remove.Click
For i As Integer = 0 To ListBoxResult.SelectedItems.Count - 1 Step 1
ListBoxBron.Items.Add(ListBoxResult.SelectedItems(i))
ListBoxResult.Items.Remove(ListBoxResult.SelectedItems(i))
Next
End Sub[/CPP]
 
Laatst bewerkt:
Martin,
bedankt voor je antwoord.
Je heb inderdaad gelijk dat bij Toevoegen het item weg is.
Alleen als ik item 3 van de listbox1 toevoeg aan listbox2
krijg ik een indexnr 0 terug. Terwijl hij als nr 3 in de tabel staat.
Dus moet ik 3 terug krijgen
Volgens mij moet ik in Listbox1 de IDnr en taakomschrijving meegeven in listboxvullen, maar hoe
Moet je dan geen Array maken?
 
Laatst bewerkt:
Hoi,

Ik zou dan zelf listviews gebruiken, en dan de view op "List" zetten. Dan kan je namelijk vervolgens het ID in de tag van alle items zetten.

Als je dan ook nog gelijk bij het vullen sorteert en deze codes gebruikt voor het toevoegen en verwijderen uit listview2, dan komen de items ook iedere keer weer op dezelfde plaats te staan. Het sorteren gaat niet op ID, maar op de tekst:
[CPP] Private Sub BtnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAdd.Click
For i As Integer = 0 To ListView1.SelectedItems.Count - 1 Step 1
ListView2.Items.Add(ListView1.SelectedItems(i).Clone)
ListView1.Items.Remove(ListView1.SelectedItems(i))
Next

ListView2.Sorting = SortOrder.Ascending
ListView2.Sort()
End Sub

Private Sub BtnRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnRemove.Click
For i As Integer = 0 To ListView2.SelectedItems.Count - 1 Step 1
ListView1.Items.Add(ListView2.SelectedItems(i).Clone)
ListView2.Items.Remove(ListView2.SelectedItems(i))
Next

ListView1.Sorting = SortOrder.Ascending
ListView1.Sort()
End Sub[/CPP]

Het toevoegen van een item zou dat (waarschijnlijk ongeveer) zo moeten:
[CPP] Dim ID As Integer = 0
Dim Text As String = "De tekst"
Dim LstItem As New ListViewItem
LstItem.Tag = ID
LstItem.Text = Text
ListView1.Items.Add(LstItem)[/CPP]

Het sorteren gaat makkelijk zo (moet je na het toevoegen van alle items dan nog eens doen):
[CPP] ListView1.Sorting = SortOrder.Ascending
ListView1.Sort()[/CPP]

Ik hoop dat het op deze manier helemaal werkt!

MartinJM
 
He Martin
Bedankt weer zover,
Het werkt zowel, behalve als ik 3 items heb en deze in
een for i - next i loop doet zal hier toch dan wel een
een i geplaatst moeten.
Ben vermoedelijk te lang aan het proberen geweest vandaag.
ListView1.Items.Add(LstItem)
Hier tussen moet ergens i staan, maar wat ik ook probeer helaas

Edit:
Heb de fout al gevonden.
Dim LstItem As New ListViewItem
in de for-Next loop gezet.
 
Laatst bewerkt:
Hoi,

Dus de vraag is opgelost? Druk je dan ook weer even op 'vraag opgelost'?

MartinJM
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan