Surligner une ligne dans une treeview [Résolu]

cs_DAN1 78 Messages postés samedi 12 avril 2003Date d'inscription 19 juillet 2017 Dernière intervention - 11 mai 2017 à 18:04 - Dernière réponse : cs_DAN1 78 Messages postés samedi 12 avril 2003Date d'inscription 19 juillet 2017 Dernière intervention
- 13 mai 2017 à 18:29
Bonjour.
J'affiche dans une treeview la liste de mes répertoires contenant des médias (JPEG, avis… ).
Lorsque je clique sur une ligne de ce tableau cette ligne se surligne en bleu.
Dans une listbox s'affiche alors la liste de mes médias.
Lorsque je clique sur une ligne de cette listbox pour afficher ma media, cette dernière ligne se colore en bleu mais la ligne de mon tableau Treeview perd sa coloration
Comment faire pour que cette ligne indiquant le répertoire dans ma Treeview reste surligné ?
D'avance merci de votre aide.


--
Afficher la suite 
78Messages postés samedi 12 avril 2003Date d'inscription 19 juillet 2017 Dernière intervention

13 réponses

Répondre au sujet
Whismeril 10512 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 11 mai 2017 à 18:08
cs_DAN1 78 Messages postés samedi 12 avril 2003Date d'inscription 19 juillet 2017 Dernière intervention - 11 mai 2017 à 21:06
merci de ta réponse mais je programme en VB.net
Whismeril 10512 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > cs_DAN1 78 Messages postés samedi 12 avril 2003Date d'inscription 19 juillet 2017 Dernière intervention - 12 mai 2017 à 06:32
Vb.net, c'est du c# avec un Skin vb.
Donc tout code c# une fois passé dans le Skin fonctionne en vb.net
Commenter la réponse de Whismeril
cs_DAN1 78 Messages postés samedi 12 avril 2003Date d'inscription 19 juillet 2017 Dernière intervention - 12 mai 2017 à 13:44
0
Utile
1
Bonjour Whismeril.
en vb.net j'ai deux possibilités pour marquer ou surligner une ligne dans une listbox.
Soit ma listbox nommée list2
Soit en indiquant un numéro de ligne soit en n'indiquant le chemin ou le nom dans le tableau
List2.SelectedIndex = INDEXREP
List2.SelectedItem = MEMOREP

Je cherche donc une instruction comparable pour la treeview
mais j'ai tout testé sans résultat.
Merci en tout cas de ton aide.
Dan
Whismeril 10512 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 12 mai 2017 à 22:05
Non ça ne surligne pas un item ça le sélectionne ce qui a comme effet collatéral de surligné, mais (même si ca n'a pas d'intêret) on pourrait surligner un item sans le sélectionner.

Ta question était, après avoir sélectionner au click un treenode, que la HighLight collatérale reste affichée même après la perte de focus.
Comment faire pour que cette ligne indiquant le répertoire dans ma Treeview reste surligné ?


Donc je viens de tester toutes les propositions de la discussion que je t'ai mis en lien

        TreeView1.HideSelection = False
d'abord puisque c'est celle qui à la coche discussion résolue.
Avec juste cette ligne, la selection passe de bleu à gris clair, mais reste visible.
Ça répond donc à ton besoin.

La seconde réponse, qui part du principe que ce gris n'est pas assez pétant propose de dériver son propre treeview pour recoder ce cas, effectivement sa réponse n'est pas complète, mais en regardant les autres y'a moyen de trouver ce qui manque => activer le dessin manuel, et de simplifier un peu.

Public Class MonTreeView
    Inherits TreeView
    Public Sub New()
        Me.DrawMode = TreeViewDrawMode.OwnerDrawAll
    End Sub

    Protected Overrides Sub OnDrawNode(ByVal e As DrawTreeNodeEventArgs)
        If e.Node Is e.Node.TreeView.SelectedNode Then
            Dim foreColor As Color = SystemColors.HighlightText
            Dim selectedColor As Color = Color.Blue 'couleur avec focus
            Dim deselectedColor As Color = Color.Gray 'couleur sans le focus

            Dim treeFont As Font = If(e.Node.NodeFont, e.Node.TreeView.Font)

            ' New brush.
            Dim selectedTreeBrush As New SolidBrush(selectedColor) 'brush avec focus
            Dim deselectedTreeBrush As New SolidBrush(deselectedColor) 'brush sans le focus


            If Me.Focused Then
                e.Graphics.FillRectangle(selectedTreeBrush, e.Node.Bounds)
            Else
                e.Graphics.FillRectangle(deselectedTreeBrush, e.Node.Bounds)
            End If

            ControlPaint.DrawFocusRectangle(e.Graphics, e.Node.Bounds, foreColor, SystemColors.Highlight)

            TextRenderer.DrawText(e.Graphics, e.Node.Text, treeFont, e.Node.Bounds, foreColor, TextFormatFlags.GlyphOverhangPadding)
        Else
            e.DrawDefault = True
        End If
    End Sub
End Class

C'est pas parfait les "lien" et "la croix" de l'item sélectionné ne sont pas dessiné.
J'ai pas cherché plus pour l'instant
Commenter la réponse de cs_DAN1
cs_Le Pivert 4759 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 12 mai 2017 à 16:33
0
Utile
6
bonjour,

Quand je t'ai laissé nous étions sur une treeview et une listview:

http://codes-sources.commentcamarche.net/forum/affich-10075944-openfiledialog#10


Là tu parles de listBox, donc ce n'est pas la même configuration.

Il te faut poster les codes de surlignement de la treeview et de la listbox, mais pas:

List2.SelectedIndex = INDEXREP
List2.SelectedItem = MEMOREP

avec cela on ne comprend rien!

cs_Le Pivert 4759 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > cs_DAN1 78 Messages postés samedi 12 avril 2003Date d'inscription 19 juillet 2017 Dernière intervention - 12 mai 2017 à 20:05
Mettre dans:
   Private Sub treeView1_NodeMouseClick(ByVal sender As Object, ByVal e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick


a la fin:
  e.Node.ForeColor = Color.Blue



Voilà
cs_DAN1 78 Messages postés samedi 12 avril 2003Date d'inscription 19 juillet 2017 Dernière intervention > cs_Le Pivert 4759 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 12 mai 2017 à 23:10
Merci beaucoup Le Pivert.
Ça marche nickel, j'ai rajouté en tête de ma procédure une ligne pour remettre en noir la sélection précédente que j'avais mémorisée en fin de :
Private Sub TreeView1_AfterSelect(......

Une dernière question si je n'avais plus pas.

Comment faire pour obtenir cette ligne en noir sur fond bleu ?

Dans ma TREEVIEW j'ai une ligne de répertoire qui se nomme «PHOTO», par quelle instruction je peux me positionner directement sur cette ligne «PHOTO» ?

Un grand merci encore à toi.
Dan







....
cs_Le Pivert 4759 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > cs_DAN1 78 Messages postés samedi 12 avril 2003Date d'inscription 19 juillet 2017 Dernière intervention - 13 mai 2017 à 08:33
comment faire pour obtenir cette ligne en noir sur fond bleu ?

  e.Node.ForeColor = Color.Black
  e.Node.BackColor = Color.Blue




par quelle instruction je peux me positionner directement sur cette ligne «PHOTO» ?

http://www.devasp.net/net/articles/display/905.html

Voilà

Bon WE

@+
cs_Le Pivert 4759 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention > cs_Le Pivert 4759 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 13 mai 2017 à 11:57
Voici 2 manières de rechercher un nœud
Mettre 2 Button et une TextBox avec ce code:


#Region "Remove BackColor"
    Private Sub treeView1_Click(ByVal sender As System.Object, _
     ByVal e As System.EventArgs)
        ClearBackColor()
    End Sub
    'recursively move through the treeview nodes
    'and reset backcolors to white
    Private Sub ClearBackColor()

        Dim nodes As TreeNodeCollection
        nodes = TreeView1.Nodes
        Dim n As TreeNode

        For Each n In nodes
            ClearRecursive(n)
        Next
    End Sub
    'called by ClearBackColor function
    Private Sub ClearRecursive(ByVal treeNode As TreeNode)
        Dim tn As TreeNode
        For Each tn In treeNode.Nodes
            tn.BackColor = Color.White
            ClearRecursive(tn)
        Next
    End Sub
#End Region
#Region "Find Node By Name"
     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        If TextBox1.Text = "" Then Exit Sub
        ClearBackColor()
        Try
            Dim tn() As TreeNode = _
                TreeView1.Nodes(0).Nodes.Find(TextBox1.Text, True)

            Dim i As Integer = 0

            For i = 0 To tn.Length
                TreeView1.SelectedNode = tn(i)
                TreeView1.SelectedNode.BackColor = Color.Blue
            Next i
        Catch
            'do nothing
        End Try
    End Sub
#End Region
#Region "Find By Text"
    Private Sub Button2_Click_1(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        If TextBox1.Text = "" Then  Exit Sub
        ClearBackColor()
        FindByText()
    End Sub
    Private Sub FindByText()
        Dim nodes As TreeNodeCollection = TreeView1.Nodes
        Dim n As TreeNode
        For Each n In nodes
            FindRecursive(n)
        Next
    End Sub
    Private Sub FindRecursive(ByVal tNode As TreeNode)
        Dim tn As TreeNode
        For Each tn In tNode.Nodes
            ' if the text properties match, color the item
            If tn.Text = Me.TextBox1.Text Then
                tn.BackColor = Color.Blue
            End If
            FindRecursive(tn)
        Next
    End Sub
#End Region


Tu regardes celle des 2 qui fonctionne?

Chez moi il n'y a que: "Find By Text" qui fonctionne!


Voilà a toi de jouer!

@+ Le Pivert
cs_DAN1 78 Messages postés samedi 12 avril 2003Date d'inscription 19 juillet 2017 Dernière intervention > cs_Le Pivert 4759 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 11 décembre 2017 Dernière intervention - 13 mai 2017 à 18:29
Merci_Le Pivert.
Ça marche super.
Avec toute mon estime et mon admiration.
Dan
Commenter la réponse de cs_Le Pivert
cs_DAN1 78 Messages postés samedi 12 avril 2003Date d'inscription 19 juillet 2017 Dernière intervention - 12 mai 2017 à 19:41
0
Utile
Pour compléter ma question je joins également une copie d'écran de mon application.
La photo sélectionnait appartient au répertoireHOTO dans ma triviaux mais probablement par perte de focus lorsque j'ai cliqué le surligner agent bleu P de ce répertoire OTO a disparu.
Hsur l'une des lignes de la liste des photos de mon répertoirePHOTO



Commenter la réponse de cs_DAN1

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.