|
L'auto complétion avec .Net 2.0
Publié le lundi 21 mai 2007, dernière modification le lundi 28 janvier 2008
|
Dans ce tutoriel, nous allons aborder l'autocomplétion et voir comment l'utiliser avec les contrôles Winform .Net 2.0
|
1. Introduction
Certains contrôles de
.Net 2.0
sont arrivés avec une nouvelle fonctionnalité bien sympathique : l'auto complétion.
Si vous désirez un petit aperçu de cette nouveauté, ouvrez la commande Exécuter du menu Démarrer et tapez un chemin de fichier ou une URL par exemple.
Pour des raisons de simplicité, je ne décrirai que son application au contrôle
TextBox
.
Vous verrez que le fonctionnement est identique quel que soit le contrôle utilisé.
2. Les styles d'autocomplétion
Le style d'auto complétion est défini par la propriété
AutoCompleteMode
du contrôle.
Le
Framework
vous propose 4 formes d'auto complétion :
-
Suggest
-
Append
-
SuggestAppend
-
None
2-1. "None"
«
None
» désactive l'auto complétion, c'est d'ailleurs sa valeur par défaut.
Elle n'a donc pas un grand intérêt ici.
2-2. "Append"
En mode «
Append
», le système complète le texte du contrôle avec la première suggestion cohérente qu'il trouve.
En voici un aperçu :
2-3. "Suggest"
Le mode «
Suggest
» est celui de la commande Exécuter du menu démarrer.
Il fait apparaitre une liste des possibilités qui coïncident avec votre saisie.
En voici un aperçu :
2-4. "SuggestAppend"
Ce mode est une combinaison des modes «
Suggest
» et «
Append
».
Vous pouvez facilement imaginer le résultat :
Voila un aperçu de l'auto complétion.
Maintenant, vous vous posez sans doute la question de savoir comment il sait que suggérer.
3. Les sources d'auto complétion
Il existe 8 sources différentes d'auto complétion.
La dernière de ces sources offre des possibilités quasi-infinies.
Ces 8 sources sont :
-
None
-
FileSystem
-
FileSystemDirectories
-
HistoryList
-
RecentlyUsedList
-
AllUrl
-
AllSystemRessources
-
CustomSource
3-1. "None"
«
None
», comme pour le mode, désactive la fonction d'auto complétion.
Vous vous retrouvez donc avec un contrôle classique.
3-2. "FileSystem"
«
FileSystem
» vous permet de compléter en se basant sur l'arborescence de fichier du système, aussi bien en local sur vos disques durs que sur le réseau.
Il inclut les fichiers et les dossiers.
3-3. "FileSystemDirectories"
Ce mode d'auto complétion est le même que «
FileSystem
», sauf qu'il n'affiche que les dossiers.
3-4. "HistoryList"
Cette source d'auto complétion vous permet de retrouver les éléments récemment ouverts par le système d'exploitation.
Elle reprend les éléments dernièrement ouverts que l'on retrouve dans le menu démarrer ainsi que les dernières URL saisies.
3-5. "RecentlyUsedList"
Cette source d'auto complétion est l'équivalent de toutes les commandes que vous pouvez retrouver dans la liste de la fenêtre Exécuter.
3-6. "AllUrl"
Ce mode d'auto complétion vous permet de proposer les URL à la façon d'Internet Explorer.
3-7. "AllSystemRessources"
"
AllSystemRessources
" est la combinaison des 5 modes que nous venons de voir précédemment.
3-8. "CustomSource"
«
CustomSource
» vous permet de définir vous-même votre source pour l'auto complétion.
Enfin pour être un peu plus exactement, de la coder.
Nous verrons comment procéder dans le chapitre suivant.
4. La source personnalisée ou CustomSource
Définir la source personnalisée est une chose très simple.
En écrivant ce tutoriel, j'ai testé une première méthode qui s'est révélée atroce niveau performances.
Celle décrite ici est nettement meilleure et fonctionne très bien.
L'idée, pour définir est une source personnalisée d'auto complétion, est de créer une source de type « AutoCompleteStringCollection », de la remplir et de l'attribuer au contrôle.
L'exemple suivant utilise une table Contact de la base AdventureNetworks pour récupérer une liste des noms et définir la propriété AutoCompleteCustomSource d'un contrôle TextBox nommé txtCustomComplete.
|
|
Copier le code
|
1 Imports System.Data.SqlClient
2 Imports System.Threading
3
4 Public Class Form1
5
6 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
7 ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf FillAutoComplete))
8 End Sub
9
10 Private Sub FillAutoComplete(ByVal state As Object)
11
12 Dim res As AutoCompleteStringCollection = New AutoCompleteStringCollection()
13
14 Using scon As New SqlConnection(My.Settings.TestCS)
15 Using scom As New SqlCommand("", scon)
16
17 scom.CommandText = String.Format("SELECT DISTINCT LastName FROM Person.Contact " & _
18 "WHERE (LastName IS NOT NULL) ORDER BY LastName", Me.txtCustomComplete.Text.ToLower())
19
20 scon.Open()
21
22 Dim reader As SqlDataReader = scom.ExecuteReader
23
24 While reader.Read()
25 res.Add(reader.GetString(0))
26 End While
27
28 reader.Close()
29 scon.Close()
30
31 End Using
32 End Using
33
34 If res.Count <> 0 Then
35 SetSource(res)
36 End If
37 End Sub
38
39 Private Delegate Sub SetSourceDelegate(ByVal source As AutoCompleteStringCollection)
40 Private Sub SetSource(ByVal source As AutoCompleteStringCollection)
41 If Me.InvokeRequired Then
42 Me.Invoke(New SetSourceDelegate(AddressOf SetSource), source)
43 Else
44 Me.txtCustomComplete.AutoCompleteCustomSource = source
45 End If
46 End Sub
47
48 End Class
|
Comme vous pouvez le constater, rien de bien compliqué.
Je récupère mes données depuis une base, mais j'aurais très bien pu choisir n'importe quel type de source de données comme un
WebService
.
Dans le cas d'un
WebService
, le temps de réponse pouvant être relativement variable, j'ai préféré charger mes données dans un autre thread afin de ne pas bloquer l'application.
Certes, dans ce cas précis, ce n'est pas très gênant.
De plus, comme l'auto complétion n'est, dans la majeure partie des cas, pas une fonctionnalité essentielle, on peut admettre qu'elle ne soit disponible qu'un petit moment après le chargement de la fenêtre.
5. Conclusion
Cette fonctionnalité n'est pas celle du siècle, mais elle apportera un petit confort supplémentaire pour les utilisateurs de vos applications sans pour autant passer des heures à la mettre en place.
5-1. Remerciement
Merci
Cécile (khany)
pour la correction.
|