Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    23

    [VB6] listbox

    Ciao
    Ho un problema sulle listbox che penso sarà banale per un esperto.
    Ho 2 listbox : quando clicco su un elemento della 1, lo visualizzo sulla 2. Vorrei, però, farlo sparire dalla 1, ma il RemoveItem mi dà errore.
    Ecco il codice :
    codice:
    Private Sub Command1_Click()
    Dim I As Integer
        List2.Clear
        For I = 0 To List1.ListCount - 1
        If List1.Selected(I) = True Then
            List2.AddItem List1.List(I)
            List1.RemoveItem I
        End If
        Next I
    End Sub
    Come devo formulare correttamente il codice ?
    E come se poi voglio far riapparire una o tutte le voci della List 2 nella 1 (con un doppio clic o con un altro cmdButton) ?
    Grazie

  2. #2
    a me funziona bene.
    HO creato due listbox e un bottone per la valorizzazione di una delle due listbox con 3 elementi A, B, C.

    codice:
    Private Sub Command1_Click()
    List1.AddItem "A"
    List1.AddItem "B"
    List1.AddItem "C"
    
    End Sub
    Al click sull'item della lista:
    codice:
    Private Sub List1_Click()
    x = List1.ListIndex
    
    List2.AddItem List1.List(x)
    List1.RemoveItem (x)
    End Sub
    che appunto rimuove da una listbox e aggiunge all'altra.
    Spero di averti aiutato. Ovviamente devi adattarlo alle tue esigenze.

  3. #3
    Ciao..

    codice:
    Private Sub Command1_Click()
    Dim matrice() As Integer, I As Integer
    I = -1
    For n = 0 To List1.ListCount - 1
        If List1.Selected(n) Then
            I = I + 1
            ReDim Preserve matrice(I)
            matrice(I) = n
        End If
    Next n
    For n = 0 To UBound(matrice)
        List2.AddItem List1.List(matrice(n))
        List1.RemoveItem List1.List(matrice(n))
    Next n
    End Sub
    Con questo codice memorizzi in una matrice i vari index degli item selezionati nel list1 (permettendoti quindi una selezione di più elementi)e li copi nel list2 cancellandoli nel list1. Mi raccomando, List1.multiselect = 1.

    Per la seconda domanda cerca di essere più preciso perchè non ho capito proprio tutto..ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    357
    Puoi provare con l'evento click:
    codice:
    Private Sub List1_Click()
    Dim I As Integer
        For I = List1.ListCount - 1 To 0 Step -1
            If List1.Selected(I) = True Then
                List2.AddItem List1.List(I)
                List1.RemoveItem I
            End If
        Next I
    End Sub
    Ho tolto la list2.clear perchè pulirebbe ogni volta list2.

    Se invece vuoi spostare tutti gli item della list1 nella list2 con un tasto di comando(stai solo attento che l'ordine con cui viene visualizzato nella list2 è inverso a quello della list1,puoi eventualmente attivare la proprietà sorted):
    codice:
    Private Sub Command1_Click()
    Dim I As Integer
        List2.Clear
        For I = List1.ListCount - 1 To 0 Step -1
            List2.AddItem List1.List(I)
            List1.RemoveItem I
        Next I
        Command1.Enabled = False
        Command2.Enabled = True
    End Sub
    e per riportare gli item nella list1:
    codice:
    Private Sub Command2_Click()
    List1.Clear
        For I = List2.ListCount - 1 To 0 Step -1
            List1.AddItem List2.List(I)
            List2.RemoveItem I
        Next I
        Command1.Enabled = True
        Command2.Enabled = False
    End Sub

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    23
    Grazie innanzitutto a chi mi ha risposto
    Dunque :
    x motogpdesmo 16 :
    il tuo codice va benissimo. Vorrei, però, poter prima cliccare su più voci (non solo una alla volta) e poi passarle alla list2. Come posso fare ?
    E se poi voglio riportare tutte le voci alla list1 ?


    x MdE2005 :
    mi si genera un errore di run-time 13 'oggetto non corrispondente' ed il debug si posiziona su 'List1.RemoveItem List1.List(matrice(n))'

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    23
    Grazie mgmg
    il tuo codice è assolutamente ok.

  7. #7
    Hai ragione..una svista, prova questo:

    codice:
    Private Sub Command1_Click()
    Dim matrice() As Integer, I As Integer
    I = -1
    For n = 0 To List1.ListCount - 1
        If List1.Selected(n) Then
            I = I + 1
            ReDim Preserve matrice(I)
            matrice(I) = n
        End If
    Next n
    For n = 0 To UBound(matrice)
        List2.AddItem List1.List(matrice(n))
    Next n
    For n = 0 To UBound(matrice)
        List1.RemoveItem matrice(n)
    Next n
    End Sub
    
    Private Sub Command2_Click()
    List2.Clear
    For n = 0 To List2.ListCount - 1
        List1.AddItem List2.List(n)
    Next n
    End Sub
    fammi sapere..ciao

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    23
    Ciao MdE2005 e grazie per i consigli
    Ho riprovato il codice, adesso va benissimo. Mi potresti consigliare una variante che mi consenta di selezionare prima una o più voci sulla list1 e poi - da cmdButton - di spostarle nell'altra ?

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    357
    Per selezionare più item in una listview basta che imposti la proprietà Multiselect = Simple e con il tasto di comando le sposti nella list2.

    codice:
    Private Sub Command1_Click()
    Dim i As Integer
        For i = List1.ListCount - 1 To 0 Step -1
            If List1.Selected(i) = True Then
                List2.AddItem List1.List(i)
                List1.RemoveItem i
            End If
        Next i
        Command1.Enabled = False
        Command2.Enabled = True
    End Sub
    Ciao

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    23
    Ciao mgmg
    grazie ancora, il codice gira ottimamente.
    Puoi togliermi una curiosità ?
    Se nel ciclo for inserisco :
    For I = 0 To List1.ListCount - 1
    invece del tuo
    For I = List1.ListCount - 1 To 0 Step -1
    il debug mi segnala un errore di run-time 381 'Indice della matrice di proprietà non valido'.
    Francamente non comprendo il perchè : in cosa cambia analizzare un array in un senso anzichè nel senso opposto ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.