Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Listview, come sapere quanti elementi sono selezionati?

Ho un listview. Nel momento in cui clicco su un item,
cioe nell'evento ItemClick, ho bisogno di sapere quanti elementi
sono selezionati.
Ho provato con il seguente codice
   Dim TmpItem As ListItem
   Dim I As Long
   For Each TmpItem In lvw.ListItems
      If TmpItem.Selected Then I = I + 1
   Next TmpItem
Ma non funziona.
Provate ad esempio a selezionare alcuni item in sequenza (con shift),
poi a selezionare un elemento tra quelli gia' selezionati.
Ci si ritrova con un solo elemento selezionato, ma il conteggio
da ancora il numero precedente.
Se poi provate a deselezionare degli elementi con ctrl, ItemClick non
viene nemmeno chiamata.
Mi acconterei anche di non sapere il numero esatto ma solo nessuno, 1,
piu' d'uno.
--
Samuele Battarra
mail server: 
libero.it
, account: battarsa
prova il mio newsreader:
http://digilander.iol.it/battarsa/programmi/leggiminews.html

 ha scritto nel messaggio
news:bLq07.2040$K55....@news.infostrada.it...


 ha scritto nel messaggio
news:bLq07.2040$K55....@news.infostrada.it...



boh, a me funziona tutto regolarmente (VB6 + SP5, Microsoft Windows Common
Control 6.0 SP4);
ti posto il codice di test:
Option Explicit
Private Sub Form_Load()
    Dim li As MSComctlLib.ListItem
    With ListView1
        .View = lvwReport
        .FullRowSelect = True
        .MultiSelect = True
        .ColumnHeaders.Add , , "Nome"
        .ColumnHeaders.Add , , "Cognome"
        Set li = .ListItems.Add()
        li.Text = "Mario"
        li.SubItems(1) = "Rossi"
        Set li = .ListItems.Add()
        li.Text = "Giuseppe"
        li.SubItems(1) = "Verdi"
        Set li = .ListItems.Add()
        li.Text = "Osvaldo"
        li.SubItems(1) = "Bianchi"
    End With
End Sub
Private Sub Command1_Click()
    Dim li As MSComctlLib.ListItem
    Dim s As Integer
    For Each li In ListView1.ListItems
        If li.Selected Then
            s = s + 1
        End If
    Next
    MsgBox s
End Sub
ciao

 
[cut]
Prova a spostare il codice che hai messo in Command1_Click
dentro ListView1_ItemClick. Vedrai che non funziona.
Inoltre ti suggerisco di sostituire MsgBox s con Debug.Print s.


 
[cut]
Prova a spostare il codice che hai messo in Command1_Click
dentro ListView1_ItemClick. Vedrai che non funziona.
Inoltre ti suggerisco di sostituire MsgBox s con Debug.Print s.
-- 


 
L'uso di un ciclo for normale anziche' un ciclo for each
non cambia i risultati.


 --
fatto e funziona tutto regolarmente....
suppongo ci sia qlc dettaglio che mi sfugge
ciao

HellBoy ha scritto:

Hai seguito le istruzioni per riprodure le condizioni d'errore?
Cioe, selezioni tre item consecutivi (devi avere abilitato la selezione
multipla e lavorare in visualizzazione report), quindi clicchi su
quello di mezzo. Da me viene chiamato ItemClick all'interno di cui il
conteggio mi restituisce 3.



se seleziono 3 item consecutivi (ctrl + click sul primo, idem per il
secondo, idem per il terzo) e successivamente rifaccio click +ctrl su uno
qualsiasi (idem il centrale) l'unica cosa strana che noto è che non viene
generato l'evento di ItemClick;
in altre parole ho notato che in fase di deselezione di un item non viene
generato alcun ItemClick;
la documentazione ufficiale di VB non nomina questo (inatteso) effetto;
in ogni caso l'evento Click viene sempre generato, provare per credere;
ciao

 
ciao



beh, ovvio ;))
cmq il punto è che il metodo per contare (e determinare) gli item
selezionati è in ogni caso valido;
l'unica sorpresa a riguardo è il firing di determinati eventi (nello
specifico ItemClick) che non sempre avviene nella maniera che ci si potrebbe
aspettare;
comunque in definitiva niente di troppo problematico: esistono altri eventi
(mouse o tastiera) ai quali fare riferimento e il cui firing non sembra
soffrire dallo stato di selezione dell'item in oggetto;
ciao