Bonjour,

J'ai réalisé une fonction qui permet a transformer un combobox en une barre de recherche avec proposition de données.

Par exemple, ma BD comprends :
  • Maison
  • Grande Maison
  • Trés Grande Maison
  • Voiture
  • Grande Voiture
  • Trés Grande Voiture


Si je tape Maison, le combobox me propose Maison, Grande Maison et Trés Grande Maison. Si je tape Trés Grande, il me propose Trés Grande Maison et Trés Grande Voiture. Si je tape Trés Voiture, il me propose Trés Grande Voiture.

Tout fonctionne quaziement parfaitement, mais je recherche des yeux nouveaux afin d'optimiser la code. En effet, il n'est pas trés performant et avec une BD de plus de 100 valeurs, une certaine latence se fait resentir.

Enfin, lorsque l'on esseye de supprimer la valeur rentrée, on se retrouve à ne pas pouvoir supprimer le premier mot.

Voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Private Sub ToolStripComboBox_Research_KeyUp(sender As Object, e As KeyEventArgs) Handles ToolStripComboBox_Research.KeyUp
	Dim actual As String
 
	actual = Me.ToolStripComboBox_Research.Text.Remove(Me.ToolStripComboBox_Research.SelectionStart, Me.ToolStripComboBox_Research.SelectionLength)
 
	ToolStripComboBox_Research.DroppedDown = False
	Me.ToolStripComboBox_Research.Items.Clear()
 
	For i As Integer = 0 To Split(actual, " ").Count - 1
		If Split(actual, " ")(i) = "" Then Exit For
		For j As Integer = 1 To donnees.Count
			If InStr(donnees.Item(j).ToString.ToLower, Split(actual, " ")(i).ToLower) <> 0 Then
				If Me.ToolStripComboBox_Research.Items.IndexOf(donnees.Item(j)) = -1 Then
					Me.ToolStripComboBox_Research.Items.Add(donnees.Item(j))
				End If
				If Me.ToolStripComboBox_Research.Items.Count <> 0 And i > 0 Then
					For k As Integer = 0 To Me.ToolStripComboBox_Research.Items.Count - 1
						If k > Me.ToolStripComboBox_Research.Items.Count - 1 Then Exit For
 
						If InStr(Me.ToolStripComboBox_Research.Items(k).ToString.ToLower, Split(actual, " ")(i).ToLower) = 0 Then
							Me.ToolStripComboBox_Research.Items.RemoveAt(k)
							k = -1
						End If
						If k > -1 Then
							If InStr(Me.ToolStripComboBox_Research.Items(k).ToString.ToLower, Split(actual, " ")(i - 1).ToLower) = 0 Then
								Me.ToolStripComboBox_Research.Items.RemoveAt(k)
								k = -1
							End If
						End If
					Next
				End If
			End If
		Next
	Next
 
	If Me.ToolStripComboBox_Research.Items.Count > 0 Then
		ToolStripComboBox_Research.DroppedDown = True
		Me.ToolStripComboBox_Research.SelectionStart = actual.Length
		Me.ToolStripComboBox_Research.SelectionLength = Me.ToolStripComboBox_Research.Items(0).Length
	Else
		For l As Integer = 1 To donnees.Count
			Me.ToolStripComboBox_Research.Items.Add(donnees.Item(l))
		Next
		ToolStripComboBox_Research.DroppedDown = False
		Me.ToolStripComboBox_Research.SelectionStart = actual.Length
	End If
	Cursor.Current = Cursors.Default
End Sub
Si vous avez des idées