GB3-Retrouver les clefs d'index d'une columnview
Rédigé par spheris
Aucun commentaire
Classé dans : apprentisssage, Columnview, gambas 3, Spinner, Tutoriel, Widget
1- Hypothèse:
Je souhaite créer une application avec une columnview qui comporte une colonne et 150 lignes.Vous savez qu'une clef 'KEY' est de type String. Pour notre problème nous allons définir des clef alléatoires.
Ceci nous forcera à utiliser les pointeurs.
2- Création de la columnview
Public Sub Form_Open() Dim a As Integer Dim b As String cv.Columns.Count = 1 cv.Columns[0].Width = 100 For a = 0 To 149 b = Str(a) & "-" & Str(Rnd(1, 15000)) cv.Add(b, "text: " & a) Next End
Détaillons le code :
cv.Columns[0].Width = 100 : La largeur de la prmière colonne (soit 0) est de 100 pixels
Maintenant nous allons remplir les 150 lignes par ce code :
For a = 0 To 149 b = Str(a) & "-" & Str(Rnd(1, 15000)) cv.Add(b, "text: " & a) 'j'appelle la columnview cv, c'est plus facile à écrire et plus rapide Next
Pour notre exemple, je crée une clef aléatoire qui est de la forme : ID-randomnumber
b = Str(a) & "-" & Str(Rnd(1, 15000))
Str() converti un nombre en chaine string
Rnd(1,15000) génère un nombre alléatoire entre 1.0 et 15000.0.
3- Utilisation des pointeurs.
Ne connaissant pas du tout les clefs générées, il 'est impossible de sélectionner la ligne 38 par exemple.Comment puis-je faire ?
Il faut définir ce qu'on appelle un pointeur. c'est tout simplement le numéro de la ligne qu'on souhaite sélectionner.
Ainsi si je veux connaitre la clef de la ligne 38, voici comment je peux faire.
Dim a As Integer cv.MoveFirst() ' je mets le pointeur à la ligne 0 For a = 0 To 37 cv.MoveNext() Next tkey.Text = cv.Item.Key 'voici le resultat de la 37eme ligne à la 38eme position
cv.Item.Selected = 37
4- Evènement Click de la columnview.
Lors d'un clic ,je souhaite afficher la clef de la ligne cliquée dans une textbox appelée tkeyPublic Sub cv_Click() tkey.Text = cv.Current.Key 'renovoi la clef courante c'est à dire la ligne sélectionnée End
5- Utilisation du Spinbox
Voici un widget intéressant au passage que nous pourrions utiliser dans notre application.il est composé d'une valuebox et deux boutons + et -.
Nous définissons la valeur max dans les propriétés à 149
Ensuite nous écrivons ce code :
Public Sub spointer_Change() Dim a As Integer cv.MoveFirst() 'se place à la ligne 0 For a = 0 To (spointer.Value - 1) cv.MoveNext() 'déplace toi d'un cran tkey.Text = cv.Item.Key 'affiche la clef dans la boite tkey Next cv.Item.Selected = spointer.Value 'séectionne la ligne pointée par le pointeur. End
Va au début et passe dans une boucle FOR NEXT jusqu'à arriver à la valeur du spinbox moins un.
6- Deux autres solutions de Bruces.
Je vous mets les solutions pour le fun :
For Each sKey As String In ColumnView1.Keys Print sKey Next
Conclusion :
J'ai cherché depuis un long moment comment faire et Gianluigi m'a aidé, un grand merci à lui.ciao.