Comment savoir si on clique sur un noeud "parent" ou "enfant" dans une TreeView [Résolu]

cs_fabiano13 262 Messages postés mardi 26 février 2002Date d'inscription 27 février 2012 Dernière intervention - 17 janv. 2011 à 17:59 - Dernière réponse : cs_fabiano13 262 Messages postés mardi 26 février 2002Date d'inscription 27 février 2012 Dernière intervention
- 20 janv. 2011 à 08:52
Bonsoir,

Comment savoir si on clique sur un noeud "parent" ou "enfant" dans une TreeView ?

D'avance merci,
Fabiano
Afficher la suite 

8 réponses

Répondre au sujet
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 17 janv. 2011 à 18:18
+3
Utile
TU as la choix !

Sur un noeud particulier, la propriété Parent renverra Nothing si c'est le noeud parent de plus haut niveau et la propriété Level renverra 0.

Si c'est pas le noeud parent, la propriété Parent renverra un objet qui le parent direct de ce noeud, et la propriété Level renverra un nombre indiquant le niveau dans la branche depuis le parent de plus haut niveau (1 pour le fils, 2 pour le petit-fils, etc....)


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_casy
cs_fabiano13 262 Messages postés mardi 26 février 2002Date d'inscription 27 février 2012 Dernière intervention - 17 janv. 2011 à 18:30
0
Utile
Merci beaucoup.

A bientôt.
Fabiano
Commenter la réponse de cs_fabiano13
cs_fabiano13 262 Messages postés mardi 26 février 2002Date d'inscription 27 février 2012 Dernière intervention - 17 janv. 2011 à 20:21
0
Utile
Peux tu m'aider pour finaliser mon code ?

D'avance merci.

Je ne comprend pas pourquoi ça ne marche pas à tous les coups !

C'est une TreeView avec des cases à cocher.

Voici le but (j'ai peur de ne pas me faire comprendre - le mieux c'est de tester le code) :

Lorsqu'on clique sur le Parent on coche tous les enfants non coché.
Lorsqu'on clique sur les enfants un à un jusqu'à arriver au dernier on coche le parent et on change sa couleur de texte.


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim objTreeNode As System.Windows.Forms.TreeNode
objTreeNode = TreeView1.Nodes.Add("Test_Parent_1")
objTreeNode.Nodes.Add("Test_Fils_1.1")
objTreeNode.Nodes.Add("Test_Fils_1.2")
objTreeNode.Nodes.Add("Test_Fils_1.3")
objTreeNode.Nodes.Add("Test_Fils_1.4")
objTreeNode.Nodes.Add("Test_Fils_1.5")
objTreeNode.Nodes.Add("Test_Fils_1.6")
objTreeNode.Nodes.Add("Test_Fils_1.7")
objTreeNode = TreeView1.Nodes.Add("Test_Parent_2")
objTreeNode.Nodes.Add("Test_Fils_2.1")
objTreeNode.Nodes.Add("Test_Fils_2.2")
objTreeNode.Nodes.Add("Test_Fils_2.3")
End Sub

Dim blnUncheck As Boolean = True

Private Sub TreeView1_AfterCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterCheck
If e.Node.Parent Is Nothing Then
If (e.Node.Checked) Then
If (blnUncheck = True) Then
CheckedFils(e)
End If
Else
If (blnUncheck = False) Then
unCheckedParent(e)
End If
End If
Else
CheckedParent(e)
End If
End Sub

Private Sub unCheckedParent(ByVal e As System.Windows.Forms.TreeViewEventArgs)
Dim VerifAllChecked As Boolean = False
If e.Node.Parent Is Nothing Then
For Each oChild As TreeNode In e.Node.Nodes
If (oChild.Checked = True) Then
VerifAllChecked = True
End If
Next
End If
If (VerifAllChecked = True) Then
For Each oChild As TreeNode In e.Node.Nodes
oChild.Checked = False
Next
End If
End Sub

Private Sub CheckedFils(ByVal e As System.Windows.Forms.TreeViewEventArgs)
If e.Node.Parent Is Nothing Then
For Each oChild As TreeNode In e.Node.Nodes
If (oChild.Checked = False) Then
oChild.Checked = True
End If
Next
End If
End Sub

Private Sub CheckedParent(ByVal e As System.Windows.Forms.TreeViewEventArgs)
blnUncheck = False
If Not e.Node.Parent Is Nothing Then
For Each child As TreeNode In e.Node.Parent.Nodes
If child.Checked = False Then
blnUncheck = True
End If
Next
If blnUncheck = False Then
e.Node.Parent.Checked = True
ChangeColorParent(e.Node.Parent, True)
Else
e.Node.Parent.Checked = False
ChangeColorParent(e.Node.Parent, False)
End If
End If
End Sub

Private Sub ChangeColorParent(ByVal node As TreeNode, ByVal selected As Boolean)
Dim SelectedFont As New Font(TreeView1.Font, FontStyle.Regular)
node.NodeFont = IIf(selected, SelectedFont, TreeView1.Font)
node.ForeColor = IIf(selected, Color.Green, TreeView1.ForeColor)
If node.Parent IsNot Nothing Then
ChangeColorParent(node.Parent, selected)
End If
End Sub
Commenter la réponse de cs_fabiano13
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 17 janv. 2011 à 22:21
0
Utile
Il y a un problème dans le déclenchement de l'évènement AfterCheck qui ne se déclenche pas à chaque fois, mais je n'arrive pas à en trouver la cause, ni le moyen de le contourner.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Commenter la réponse de cs_casy
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 19 janv. 2011 à 00:05
0
Utile
Salut
Essayes de simplifier ton code
j'ai écrit autre chose
 Private Sub TreeView1_AfterCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterCheck
        Dim counter As Integer
        'cocher parent
        If e.Node.Parent Is Nothing Then
            For Each oChild As TreeNode In e.Node.Nodes
                If oChild.Checked = False Then
                    oChild.Checked = True
                End If
            Next
            counter = 0
        Else
            If e.Node.Parent.Checked = False Then
                For Each oChild As TreeNode In e.Node.Parent.Nodes
                    If oChild.Checked = True Then
                        counter = counter + 1
                        If counter = e.Node.Parent.Nodes.Count Then
                            e.Node.Parent.NodeFont = New Font("arial", 14, FontStyle.Bold, GraphicsUnit.Pixel)
                            e.Node.Parent.ForeColor = Color.DarkSlateBlue
                        End If
                    End If
                Next
            End If
        End If

    End Sub
End Class
Commenter la réponse de cs_ShayW
cs_fabiano13 262 Messages postés mardi 26 février 2002Date d'inscription 27 février 2012 Dernière intervention - 19 janv. 2011 à 09:00
0
Utile
Merci ShayW et Casy.

J'ai été plus collégiale sur ce coup voici ci dessous mon code (pas très beau, mais suffisamment propre pour marcher ) :

J'ai une dernière question sur un TreeView. Peut-on inclure des colonnes et surtout comment (voir exemple) ?

D'avance merci à vous deux.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim objTreeNode As System.Windows.Forms.TreeNode
objTreeNode = TreeView1.Nodes.Add("Test_Parent_1 ")
objTreeNode.Nodes.Add("Test_Fils_1.1")
objTreeNode.Nodes.Add("Test_Fils_1.2")
objTreeNode.Nodes.Add("Test_Fils_1.3")
objTreeNode.Nodes.Add("Test_Fils_1.4")
objTreeNode.Nodes.Add("Test_Fils_1.5")
objTreeNode.Nodes.Add("Test_Fils_1.6")
objTreeNode.Nodes.Add("Test_Fils_1.7")
objTreeNode = TreeView1.Nodes.Add("Test_Parent_2 ")
objTreeNode.Nodes.Add("Test_Fils_2.1")
objTreeNode.Nodes.Add("Test_Fils_2.2")
objTreeNode.Nodes.Add("Test_Fils_2.3") '.Checked = True
VerifAllParent(TreeView1, True, False)
End Sub

Dim nodCurrent As TreeNode

Dim blnUncheck As Boolean = True
Dim VerifAllChecked As Boolean = False
Dim VerifEnfant As Boolean = True

Private Sub TreeView1_AfterCheck(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterCheck
If e.Node.Parent Is Nothing Then
If (e.Node.Checked) Then
If (VerifEnfant = True) Then
CheckFils(e)
VerifAllParent(e, False, False)
End If
Else
If (VerifEnfant = True) Then
unCheckFils(e)
VerifAllParent(e, False, False)
End If
End If
Else
If (VerifEnfant = True) Then
If (e.Node.Checked) Then
CheckParent(e)
Else
unCheckParent(e)
End If
VerifAllParent(e, False, True)
End If
End If
End Sub

Private Sub unCheckParent(ByVal e As System.Windows.Forms.TreeViewEventArgs)
Dim CntEnfantDeselectionne As Boolean = True
For Each child As TreeNode In e.Node.Parent.Nodes
If child.Checked = True Then
CntEnfantDeselectionne = True
End If
Next
If (CntEnfantDeselectionne = True) Then
VerifEnfant = False
e.Node.Parent.Checked = False
End If
CntEnfantDeselectionne = True
VerifEnfant = True
End Sub

Private Sub CheckParent(ByVal e As System.Windows.Forms.TreeViewEventArgs)
Dim CntEnfantDeselectionne As Boolean = False
For Each child As TreeNode In e.Node.Parent.Nodes
If child.Checked = False Then
VerifEnfant = False
CntEnfantDeselectionne = True
End If
Next
If (CntEnfantDeselectionne = False) Then
e.Node.Parent.Checked = True
End If
CntEnfantDeselectionne = False
VerifEnfant = True
End Sub

Private Sub CheckFils(ByVal e As System.Windows.Forms.TreeViewEventArgs)
If e.Node.Parent Is Nothing Then
For Each oChild As TreeNode In e.Node.Nodes
If (oChild.Checked = False) Then
VerifEnfant = False
oChild.Checked = True
End If
Next
VerifEnfant = True
End If
End Sub

Private Sub unCheckFils(ByVal e As System.Windows.Forms.TreeViewEventArgs)
If e.Node.Parent Is Nothing Then
For Each oChild As TreeNode In e.Node.Nodes
If (oChild.Checked = True) Then
VerifEnfant = False
oChild.Checked = False
End If
Next
VerifEnfant = True
End If
End Sub

Private Sub ChangeColorParent(ByVal node As TreeNode, ByVal selected As Boolean, ByVal sColor As Color)
Dim SelectedFont As New Font(TreeView1.Font, FontStyle.Bold)
Dim NotSelectedFont As New Font(TreeView1.Font, FontStyle.Bold)
node.NodeFont = IIf(selected, SelectedFont, NotSelectedFont)
node.ForeColor = IIf(selected, sColor, TreeView1.ForeColor)
If node.Parent IsNot Nothing Then
ChangeColorParent(node.Parent, selected, sColor)
End If
End Sub



Private Sub VerifAllParent(ByVal ObjNodes As Object, ByVal sAll As Boolean, ByVal sEnfant As Boolean)
Dim CntChildChecked As Boolean = False
Dim CntParentChecked As Boolean = False

If (sAll = True) Then
For Each sParent As TreeNode In ObjNodes.Nodes
If (sParent.Checked = False) Then
CntParentChecked = False
For Each child As TreeNode In sParent.Nodes
If (child.Checked = True) Then
CntChildChecked = True
End If
Next
If ((CntParentChecked False) And (CntChildChecked True)) Then
ChangeColorCurrParent(sParent, Color.Orange, 1)
ElseIf ((CntParentChecked False) And (CntChildChecked False)) Then
ChangeColorCurrParent(sParent, Color.Gray, 2)
Else
ChangeColorCurrParent(sParent, Color.Green, 3)
End If

CntChildChecked = False
CntParentChecked = False
End If
Next
Else

If (sEnfant = False) Then

If (ObjNodes.Node.Checked = True) Then
CntParentChecked = True
End If

For Each child As TreeNode In ObjNodes.Node.Nodes
If (child.Checked = True) Then
CntChildChecked = True
End If
Next

If ((CntParentChecked False) And (CntChildChecked True)) Then
ChangeColorCurrParent(ObjNodes.Node, Color.Orange, 1)
ElseIf ((CntParentChecked False) And (CntChildChecked False)) Then
ChangeColorCurrParent(ObjNodes.Node, Color.Gray, 2)
Else
ChangeColorCurrParent(ObjNodes.Node, Color.Green, 3)
End If

Else

If (ObjNodes.Node.Parent.Checked = True) Then
CntParentChecked = True
End If

For Each child As TreeNode In ObjNodes.Node.Parent.Nodes
If (child.Checked = True) Then
CntChildChecked = True
End If
Next

If ((CntParentChecked False) And (CntChildChecked True)) Then
ChangeColorCurrParent(ObjNodes.Node.Parent, Color.Orange, 1)
ElseIf ((CntParentChecked False) And (CntChildChecked False)) Then
ChangeColorCurrParent(ObjNodes.Node.Parent, Color.Gray, 2)
Else
ChangeColorCurrParent(ObjNodes.Node.Parent, Color.Green, 3)
End If

End If

CntChildChecked = False
CntParentChecked = False
End If

End Sub


Private Sub ChangeColorCurrParent(ByVal node As TreeNode, ByVal sColor As Color, ByVal sSituation As Integer)
Dim SelectedFont As New Font(TreeView1.Font, FontStyle.Bold)
node.NodeFont = IIf(True, SelectedFont, SelectedFont)
node.ForeColor = IIf(True, sColor, TreeView1.ForeColor)
Dim TextNoeud As String = node.Text
TextNoeud = Replace(TextNoeud, "- Complet", "")
TextNoeud = Replace(TextNoeud, "- Vide", "")
TextNoeud = Replace(TextNoeud, "- Incomplet", "")
Select Case sSituation
Case 1
node.Text = TextNoeud + "- Incomplet"
Case 2
node.Text = TextNoeud + "- Vide"
Case 3
node.Text = TextNoeud + "- Complet"
End Select
End Sub
Commenter la réponse de cs_fabiano13
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 19 janv. 2011 à 21:12
0
Utile
Salut

dans le forum
http://www.vbfrance.com/codes/TREELISTVIEW-AFFICHAGE-DYNAMIQUE_43116.aspx

ou dans Google cherches avec insert column in treeview vb.net
Commenter la réponse de cs_ShayW
cs_fabiano13 262 Messages postés mardi 26 février 2002Date d'inscription 27 février 2012 Dernière intervention - 20 janv. 2011 à 08:52
0
Utile
Merci.
Commenter la réponse de cs_fabiano13

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.