Listview et finditem

cs_nr Messages postés 164 Date d'inscription mardi 16 décembre 2003 Statut Membre Dernière intervention 11 juillet 2005 - 6 janv. 2005 à 09:37
TheLordFreddy Messages postés 157 Date d'inscription mardi 9 décembre 2003 Statut Membre Dernière intervention 3 février 2005 - 6 janv. 2005 à 10:55
Salut,

Voila mon soucis je n'arrive pas à rechercher un text contenu dans une listview avec la méthode finditem. Sachant que ma recherche s'effectue dans le listitem et non pas dans les subitems.

Merci d'avance.

1 réponse

TheLordFreddy Messages postés 157 Date d'inscription mardi 9 décembre 2003 Statut Membre Dernière intervention 3 février 2005 2
6 janv. 2005 à 10:55
La MSDN explique ca:


FindItem, méthode, exemple

Dans cet exemple, un contrôle ListView est rempli avec le contenu de la table Publishers qui se trouve dans la base de données Biblio.mdb. Un contrôle ComboBox est également rempli avec trois options de la méthode FindItem. Un contrôle CommandButton contient le code pour la méthode FindItem ; quand vous cliquez sur ce bouton, une invite vous demande d'entrer la chaîne à rechercher, puis la méthode FindItem recherche cette chaîne dans le contrôle ListView. Si la chaîne est trouvée, la méthode EnsureVisible fait défiler le contrôle pour afficher l'objet ListItem trouvé. Pour tester cet exemple, placez un contrôle ListView, un contrôle ComboBox et un contrôle CommandButton dans une feuille, puis collez le code dans la section des déclarations de cette feuille. Exécutez cet exemple et cliquez sur le contrôle CommandButton.


Note Vous ne pouvez pas exécuter cet exemple tant que vous n'avez pas ajouté une référence à la bibliothèque d'objets Microsoft DAO 3.0 en cliquant sur Références dans le menu Projet.

Private Sub Form_Load()
   ' Crée une variable objet pour l'objet ColumnHeader.
   Dim clmX As ColumnHeader
   ' Ajoute une collection ColumnHeaders. La largeur
   ' des colonnes est égale à celle du contrôle
   ' divisée par le nombre d'objets ColumnHeader.
   Set clmX =  ListView1.ColumnHeaders. _
      Add(, , "Company", ListView1.Width / 3)
   Set clmX = ListView1.ColumnHeaders. _
      Add(, , "Address", ListView1.Width / 3)
   Set clmX = ListView1.ColumnHeaders. _
      Add(, , "Phone", ListView1.Width / 3)

   ' Définit la propriété BorderStyle.
   ListView1.BorderStyle = ccFixedSingle  
   ' Définit la vue Détails.
   ListView1.View = lvwReport
   Command1.Caption = "&FindItem"
   
   ' Légende des contrôles OptionButton avec les 
   ' options de la méthode FindItem.
      Option1(0).Caption = "Text"
      Option1(1).Caption = "SubItem"
      Option1(2).Caption = "Tag"
      ListView1.FindItem = 0 ' Définit la propriété FindItem à Text.
   End With
   
   ' Remplit le contrôle ListView avec des enregistrements de la base de 
   ' données. Crée des variables objet pour les objets d'accès
   ' aux données.
   Dim myDb As Database, myRs As Recordset
   ' Spécifie BIBLIO.MDB comme base de données.
   Set myDb =DBEngine.Workspaces(0). _ 
      OpenDatabase("BIBLIO.MDB")
   ' Spécifie la table Publishers comme jeu d'enregistrements.
   Set myRs = myDb.OpenRecordset("Publishers", dbOpenDynaset)
   ' Quand l'enregistrement n'est pas le dernier,
   ' ajoute un objet ListItem.
   ' Utilise la référence au nouvel objet pour définir
   ' les propriétés.
   ' Définit la propriété Text avec la valeur du champ
   ' Name (myRS!Name).
   ' Définit SubItem(1) avec la valeur du champ
   ' Address (myRS!Address).
   ' Définit SubItem(7) avec la valeur du Champ
   ' Telephone (myRS!Telephone).

   While Not myRs.EOF
      Dim itmX As ListItem   ' Une variable ListItem.
      Dim intCount As Integer ' Une variable compteur.
      ' Utilise la méthode Add pour ajouter un nouveau' Définit la 
      ' propriété FindItem à Text. ListItem et définit la variable objet
      ' ListItem et définit la variable objet avec la nouvelle référence.
      ' Utilise cette référence pour définir les propriétés.
      Set itmX = ListView1.ListItems.Add(, , CStr(myRs!Name))
      ' Incrémente le compteur pour la propriété Tag.
      intCount = intCount + 1 
      ' Affecte la valeur du compteur à la propriété Tag.
      itmX.Tag = "ListItem " & intCount

      ' Si le champ Address n'est pas nul, affecte sa
      ' valeur au sous-élément 1.
      If Not IsNull(myRs!Address) Then
         ' Champ Address.
         itmX.SubItems(1) = CStr(myRs!Address)
      End If
         
      ' Si le champ Telephone n'est pas nul, affecte 
      ' sa valeur au sous-élément 2.
      If Not IsNull(myRs!Telephone) Then
         ' Champ Telephone.
         itmX.SubItems(2) = myRs!Telephone
      End If

      ' Passe à l'enregistrement suivant.
      myRs.MoveNext   
   Wend
End Sub

Private Sub Command1_Click()
   ' Méthode FindItem.
   ' Crée une variable entière intSelectedOption pour stocker l'index
   ' du bouton sélectionné. Crée une variable de chaîne appelée
   ' strFindMe. Utilise InputBox pour stocker la chaîne à
   ' rechercher dans la variable. Utilise la méthode FindItem pour
   ' rechercher cette chaîne. Option1 permet de changer l'argument
   ' FindItem qui détermine où effectuer la recherche.
   
   Dim intSelectedOption as Integer
   Dim strFindMe As String
   If Option1(0).Value = True then
      strFindMe = InputBox("Rechercher dans " & Option1(0).Caption)
      intSelectedOption = lvwText
   End If
   If Option1(1).Value = True then
      strFindMe = InputBox("Rechercher dans " & Option1(1).Caption)
      intSelectedOption = lvwSubItem
   End If
   If Option1(2).Value = True then
      strFindMe = InputBox("Rechercher dans " & Option1(2).Caption)
      intSelectedOption = lvwTag
   End If

   ' La méthode FindItem renvoie une référence à l'élément trouvé,
   ' vous devez donc créer une variable objet et lui affecter
   ' la valeur de cet élément.
   Dim itmFound As ListItem   ' Variable itmFound.
   
   Set itmFound = ListView1. _
   FindItem(strFindMe, intSelectedOption, , lvwPartial)
   
   ' Si aucun objet ListItem n'est trouvé, informe
   ' l'utilisateur et quitte.
   ' Sinon, fait défiler le contrôle avec la méthode
   ' EnsureVisible, et sélectionne l'objet ListItem.
   If itmFound Is Nothing Then  ' Si aucune concordance n'est trouvée,
   ' informe l'utilisateur et quitte.
      MsgBox "Aucune concordance" 
      Exit Sub
   Else
      ' Fait défiler ListView pour afficher l'objet ListItem.
      itmFound.EnsureVisible
      itmFound.Selected = True ' Sélectionne l'objet ListItem.
      ' Rend le focus au contrôle pour afficher la sélection.
      ListView1.SetFocus
   End If
End Sub

Private Sub ListView1_LostFocus()
   ' Quand le contrôle a perdu le focus, redéfinit la propriété
   ' propriété Selected de chaque objet ListItem à la valeur False.
   Dim i As Integer
   For i = 1 to ListView1.ListItems.Count
      ListView1.ListItems.Item(i).Selected = False
   Next i
End Sub




Sinon tu peux parcourir chaque élément de la listview :
dim i as integer
dim Trouvee as boolean
dim NumElemnt as integer

Trouvee =false

For i:=i to ListView1.ListItems.count
if ListView1.ListItems.list(i)=LeMotRecherché then
Trouvee =true
NumElemnt =i
exit for
end if
next i

if Trouvee =true then
msgbox "Le Numéro de la ligne est: " & NumElemnt
else
msgbox "élément non trouvé"
end if


-------------------------------------------
Ne vous fiez pas à l'apparence...
0
Rejoignez-nous