GB3- DROP d'un texte sur la bonne ligne d'une ListBox
Rédigé par spheris
Aucun commentaire
Classé dans : apprentisssage, gambas 3, Listbox, Tutoriel, Drag
Bonjour,
Aujourd'hui je vous propose d'étudier un drag and drop sur une listbox
Je créé les lignes à l'ouverture de ma Form comme ceci :
Un petit bouton QUIT pour quitter mon exemple :
Détaillons ce code :
Dim gv As Gridview = cv.FindChild(Drag.X, Drag.Y) :
Je créé un objet gv qui est une gridview et je dis que cet objet gridview est égal au résultat de la méthode FindChild. pourquoi ?
Car il faut savoir que la listbox hérite d'une gridview, donc elle a le même comportement et les mêmes propriétés.
Je passe en paramètre de FindChild les coordonnées du glissé/déplacé par Drag.X et Drag.Y
Dim iIndex As Integer = gv.RowAt(Drag.Y):
Je crée une variable iIndex qui récupère l'index de la ligne ainsi pointée par Drag.Y
cv[iIndex].Text = Trim(Drag.Paste("text/plain")):
Il ne me reste plus qu'à copier le texte au bon endroit c'est à dire:
cv[index trouvé].text.
Merci pour son aide.
Aujourd'hui je vous propose d'étudier un drag and drop sur une listbox
1- Problème posé
Je souhaite glisser déplacer un texte d'un label dans une listBox et je voudrais que le texte ainsi déplacé aille exactement sur la ligne que je pointe quand je lache la souris.2- Création de lignes dans la listbox
Je créé les lignes à l'ouverture de ma Form comme ceci :
Public Sub Form_Open() Dim a As Integer For a = 0 To 149 cv.Add("text: " & a, a) Next End
Un petit bouton QUIT pour quitter mon exemple :
Public Sub bquit_Click() Me.Close() End
3- Le DRAG de mon texte
pour ce glisser déplacer, je vais utiliser un Label nommé Label1 :Public Sub Label1_MouseDrag() Last.Drag(Label1.Text) End
4- Le drop sur ma ListBox nommée cv
Voici le code pour le DROP de mon label :Public Sub cv_Drop() Dim gv As Gridview = cv.FindChild(Drag.X, Drag.Y) Dim iIndex As Integer = gv.RowAt(Drag.Y) cv[iIndex].Text = Trim(Drag.Paste("text/plain")) End
Détaillons ce code :
Dim gv As Gridview = cv.FindChild(Drag.X, Drag.Y) :
Je créé un objet gv qui est une gridview et je dis que cet objet gridview est égal au résultat de la méthode FindChild. pourquoi ?
Car il faut savoir que la listbox hérite d'une gridview, donc elle a le même comportement et les mêmes propriétés.
Je passe en paramètre de FindChild les coordonnées du glissé/déplacé par Drag.X et Drag.Y
Dim iIndex As Integer = gv.RowAt(Drag.Y):
Je crée une variable iIndex qui récupère l'index de la ligne ainsi pointée par Drag.Y
cv[iIndex].Text = Trim(Drag.Paste("text/plain")):
Il ne me reste plus qu'à copier le texte au bon endroit c'est à dire:
cv[index trouvé].text.
CONCLUSION:
Je vous avoue que je n'aurais pas trouvé sans l'aide de Bruce, un expert de l'équipe de développeurs gambas.Merci pour son aide.
Voici le code complet de l'exemple :
Public Sub Form_Open() Dim a As Integer For a = 0 To 149 cv.Add("text: " & a, a) Next End Public Sub bquit_Click() Me.Close() End Public Sub Label1_MouseDrag() Last.Drag(Label1.Text) End Public Sub cv_Drop() Dim gv As Gridview = cv.FindChild(Drag.X, Drag.Y) Dim iIndex As Integer = gv.RowAt(Drag.Y) cv[iIndex].Text = Trim(Drag.Paste("text/plain")) End