Highlight un noeud d'un treeview

Signaler
Messages postés
59
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
4 août 2015
-
Messages postés
15392
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 janvier 2021
-
Bonjour, Je programme en Visual studio 2010. Je tente lors du Drag and Drop vers un treeview de highlight le noeud ou est la sourie est. Voici le code ou je reçois un message d'erreur.

Private Sub TVW_REPAS_DragOver(sender As Object, e As System.Windows.Forms.DragEventArgs) Handles TVW_REPAS.DragOver
' Retrieve the client coordinates of the mouse position.
Dim targetPoint As Point = TVW_REPAS.PointToClient(New Point(e.X, e.Y))

' Select the node at the mouse position.
TVW_REPAS.SelectedNode = TVW_REPAS.GetNodeAt(targetPoint)

TVW_REPAS.SelectedNode.BackColor = Color.Blue
TVW_REPAS.SelectedNode.ForeColor = Color.White
End Sub

L'erreur ce produit sur ces deux lignes:
TVW_REPAS.SelectedNode.BackColor = Color.Blue
TVW_REPAS.SelectedNode.ForeColor = Color.White

le message est: La référence d'objet n'est pas définie à une instance d'un objet.

Merci de votre aide.

3 réponses

Messages postés
15392
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 janvier 2021
500
Bonjour le message d'erreur est clair, une des variable vaut null.
Color doit être défini, tvw_repas à déjà servi plus haut, alors il ne te reste plus que selectednode.

Messages postés
59
Date d'inscription
lundi 11 janvier 2010
Statut
Membre
Dernière intervention
4 août 2015

Bonjour, Merci de ta réponse mais je suis nouveau en vb.net. Pourrais-tu me donner un bout de code qui pourrais m'aidé s.v.p. Je ne comprend pas pourquoi il faut définir color alors qui fait partie des propriétés du treeview.

Merci
Messages postés
15392
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 janvier 2021
500
Je me suis mal exprimé.
Je ne voulais pas dire que tu dois définir Color, mais qu'il y est puisque c'est un type system.
Je pense que c'est la sélection de nœud qui ne marche pas.



Messages postés
15392
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 janvier 2021
500
J'ai fait un test, avec les coordonnées 1,1 ça marche, mais pas avec les coordonnées 1,100.
        TreeView1.Nodes.Add("test noeud1")
        TreeView1.Nodes.Add("test noeud2")
        TreeView1.Nodes(0).Nodes.Add("test noeud1-2")
        'Dim monTreeNode As TreeNode = TreeView1.GetNodeAt(1, 1) 'ceci me selectionne "test noeud1"
        Dim monTreeNode As TreeNode = TreeView1.GetNodeAt(1, 100) 'ceci me retourne Nothing et forcément ça bug plus loin
        monTreeNode.BackColor = Color.Blue
        monTreeNode.ForeColor = Color.White


Il faut que tu testes si GetNodeAt ne vaut pas Nothing avant d'aller plus loin.
Messages postés
15392
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 janvier 2021
500
un truc comme ça
        Dim monpoint As Point = TreeView1.PointToClient(New Point(e.X, e.Y))

        Dim monTreeNode As TreeNode = TreeView1.GetNodeAt(monpoint)

        If Not (monTreeNode Is Nothing) Then
            monTreeNode.BackColor = Color.Blue
            monTreeNode.ForeColor = Color.White
        End If