OVH Cloud OVH Cloud

filelistbox + textbox

6 réponses
Avatar
Eric
salut j'ai un petit probleme !

c'est simple j'ai un filelistbox qui tire exemple sur mon c:\
pis j'ai un textbox au dessus.

ce que je veux c'est l'orsque je tappe de quoi dans mon textbox exemple:
00000 et bien qu'il me trouve si ya un fichier qui commence par 00000 dans
mon filelisbox et qu'il me le selectionne !
sa ce fait ????
merci d'avance

6 réponses

Avatar
Zoury
Salut Eric ! :O)

ce que je veux c'est l'orsque je tappe de quoi dans mon textbox exemple:
00000 et bien qu'il me trouve si ya un fichier qui commence par 00000 dans
mon filelisbox et qu'il me le selectionne !
sa ce fait ????



Lancer une recherche sur un disque complet peut prendre un certain temps..
Tu comptes réellement ça dans une arborescence aussi vaste, ou tu as nommé
c: qu'en exemple ? Tu ne souhaite pas non plus (j'espère) que les résultats
se mettre à jour à chaque fois que le contenu du textbox change ? Aussi la
liste de fichier qui y est contenu dans le répertoire risque de changer
durant le traitement ou est-elle fixe ? et combien de répertoire dois-tu
"couvrir" ?

--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
Zoury
Aah !

Regarde cet exemple :
'***
' Form1
' 1 TextBox
' 1 FileListBox
Option Explicit

Private Const LB_FINDSTRING As Long = &H18F
Private Const TEST_PATH As String = "c:tmp"

Private Declare Function SendMessage _
Lib "user32" _
Alias "SendMessageA" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByRef lParam As Any) As Long

Private Sub Form_Load()

Call CreateTestFolder(TEST_PATH)
Call CreateTestFiles(TEST_PATH)

File1.Path = TEST_PATH
Text1.Text = ""

End Sub

Private Sub Form_Unload(Cancel As Integer)
Call DeleteFolder(TEST_PATH)
End Sub

Private Sub Text1_Change()
File1.ListIndex = SendMessage(File1.hwnd, LB_FINDSTRING, -1, ByVal
Text1.Text)
End Sub

Private Sub CreateTestFolder(ByVal Path As String)

If (Not FolderExists(Path)) Then
Call MkDir(Path)
End If

End Sub

Private Sub CreateTestFiles(ByVal Path As String)

Dim i As Long
Dim hFile As Long

' créer des fichiers
For i = 1 To 100
hFile = FreeFile
Open Path & Format$(i, "000") & ".txt" For Binary As #hFile
Close #hFile
Next i

End Sub

Private Sub DeleteFolder(ByVal Path As String)
Call Kill(Path & "*.*")
Call RmDir(Path)
End Sub

Private Function FolderExists(ByVal Path As String) As Boolean
On Error Resume Next
FolderExists = ((GetAttr(Path) And vbDirectory) = vbDirectory)
End Function
'***

--
Cordialement
Yanick
MVP pour Visual Basic
"Eric" a écrit dans le message de
news:%
le c: c'est seulement une exemple :P
j'ai seulement un petit repertoire de 50 fichiers environ !
mais au lieu de scroller pour allet cherche mon numero je voudrait que en
marquant les premiere lettre il descendre automatiquement dans la bout bon
... si je marque 56 et bien il descend dans mes fichier qui commence par


56
... tk si c'est trop compliquer je vais laisser tomber !
merci




Avatar
Jean-Marc
"Eric" a écrit dans le message de
news:%
salut j'ai un petit probleme !

c'est simple j'ai un filelistbox qui tire exemple sur mon c:
pis j'ai un textbox au dessus.

ce que je veux c'est l'orsque je tappe de quoi dans mon textbox exemple:
00000 et bien qu'il me trouve si ya un fichier qui commence par 00000 dans
mon filelisbox et qu'il me le selectionne !
sa ce fait ????



Coucou,

Voici qui est tout simple et fonctionne comme tu veux:

Private Sub Text1_Change()
Dim i As Long

For i = 0 To File1.ListCount - 1
File1.Selected(i) = False
Next i
For i = 0 To File1.ListCount - 1
If UCase$(Mid$(File1.List(i), 1, Len(Text1.Text))) UCase$(Text1.Text) Then
File1.Selected(i) = True
Exit For
End If
Next i
End Sub

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Avatar
Zoury
Salut ! :O)

Marc à dit :
Voici qui est tout simple



et ça ? c'est pas simple ça ? ;O)
'***
File1.ListIndex = SendMessage(File1.hwnd, LB_FINDSTRING, -1, ByVal
Text1.Text)
'***


Mais plus sérieusement, si tu décides d'employer la méthode longue, remplace
cette boucle :
'***
For i = 0 To File1.ListCount - 1
File1.Selected(i) = False
Next i


'***

par ceci :
'***
File1.SelectedIndex = -1
'***
qui désélectionne tout les éléments d'un liste (listbox, combobox,
filelistbox, ..)

--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
Jean-Marc
"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Salut ! :O)

Marc à dit :
> Voici qui est tout simple

et ça ? c'est pas simple ça ? ;O)
'***
File1.ListIndex = SendMessage(File1.hwnd, LB_FINDSTRING, -1, ByVal
Text1.Text)
'***



Oui mais je n'aime pas trop SendMessage ...


Mais plus sérieusement, si tu décides d'employer la méthode longue,


remplace
cette boucle :
'***
> For i = 0 To File1.ListCount - 1
> File1.Selected(i) = False
> Next i
'***

par ceci :
'***
File1.SelectedIndex = -1
'***
qui désélectionne tout les éléments d'un liste (listbox, combobox,
filelistbox, ..)




Ca, c'est une excellente info. Je ne connaissais pas. Merci :-)


--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Avatar
Zoury
humm j'ai écrit une connerie hier.. c'est ListIndex qu'il faut mettre à -1.
SelectedIndex n'existe pas.. :OD


mais ya un probleme c'est si je marque 1234 et que mon nom de fichier


c'est
123 et bien il me selectionne le premier de la list ! :(
mais si je garde l'ancien et bien il me deselectionne tout



Quel son les noms de fichiers contenu dans la liste ? ici, j'obtiens le même
résultat avec les deux techniques..

Aussi, tu peux rajouter un test si Text1.Text est vide (suposons que
l'utilisateur efface sa recherche) afin de ne pas sélectionner le premier
item par défaut :
'***
Private Sub Text1_Change()

Dim i As Long

File1.ListIndex = -1
If (LenB(Text1.Text) > 0) Then

For i = 0 To File1.ListCount - 1
If UCase$(Mid$(File1.List(i), 1, Len(Text1.Text))) UCase$(Text1.Text) Then
File1.Selected(i) = True
Exit For
End If
Next i

End If

End Sub
'***

--
Cordialement
Yanick
MVP pour Visual Basic