Surligner une ligne dans une treeview

Résolu
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 - 11 mai 2017 à 18:04
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 - 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.


--

4 réponses

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
11 mai 2017 à 18:08
0
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 3
11 mai 2017 à 21:06
merci de ta réponse mais je programme en VB.net
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656 > cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017
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
0
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 3
12 mai 2017 à 13:44
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
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
Modifié le 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
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
12 mai 2017 à 16:33
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!

0
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 3
12 mai 2017 à 19:33
Bonjour Le Pivert.
Merci de ton message je n'ai pas du m'expliquer correctement.
J'ai donc uneTreewiev qui contient l'arborescence de mes répertoires photos que j'ai créés selon tes indications et qui fonctionne bien.
Lorsque je clique surv une des lignes de cette tereeview la liste des images du répertoire s'affiche dans une liste box ou dans une listewiewer.
Lorsque je sélectionne une des photos liste box ou dans une listewiewer le lignage de mon répertoire dans la Treewiew disparaît.
Ma question est :
comment maintenir le surlignage dans ma Treewiew de la ligne sélectionnait.
Pour l'exemple j'indiquais que dans une listbox pour maintenir le surlignage il y avait les instructions suivantes :
List2.SelectedIndex = ...
List2.SelectedItem = ....
je recherchais son équivalent dans une
RTreeview.
Je n'ai pas de problème particulier pour surligner ma sélection dans une listviewer puisqu'il s'agit de la dernière étape de ma visualisation mais cela m'intéresse également pour le cas où la question s'opposerait Li également pour unestwiewer.
Merci encore de ton aide.
Dan
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137 > cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017
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à
0
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 3 > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
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







....
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137 > cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017
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

@+
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137 > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
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
0
cs_DAN1 Messages postés 78 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 19 juillet 2017 3
12 mai 2017 à 19:41
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



0
Rejoignez-nous