none
Draw del treeview me pinta el color que quiero pero no me quita el azul original RRS feed

  • Pregunta

  • Buenas Draw del treeview me pinta el color que quiero pero no me quita el azul original del treeview

    Gracias

    Private Sub TreeView1_DrawNode(sender As Object, e As DrawTreeNodeEventArgs) Handles TreeView1.DrawNode
            e.DrawDefault = True
    
            '' ''Dim priceRect As Rectangle = e.Bounds
            '' ''priceRect.X = TreeView1.ClientSize.Width - 60
            '' ''priceRect.Width = 60
    
            Using sf As New StringFormat With {.Alignment = StringAlignment.Near, .LineAlignment = StringAlignment.Center}
                'Using priceBrsh As New SolidBrush(TreeView1.ForeColor)
                Using hlBrsh As New SolidBrush(TreeView1.BackColor)
                    If (e.Node.IsSelected And TreeView1.Focused) Or (e.Node.IsSelected And Not TreeView1.Focused And Not TreeView1.HideSelection) Then
                        'priceBrsh.Color = Color.White
                        hlBrsh.Color = Color.FromArgb(118, 184, 61) 'Color.FromKnownColor(KnownColor.Highlight)
                    End If
                    e.Graphics.FillRectangle(hlBrsh, e.Bounds.X + e.Bounds.Width, e.Bounds.Y, TreeView1.ClientSize.Width, e.Bounds.Height)
                    'e.Graphics.DrawString(CDbl(e.Node.Tag).ToString("N2"), TreeView1.Font, priceBrsh, priceRect, sf)
                End Using
                'End Using
            End Using
        End Sub

    lunes, 12 de marzo de 2018 17:27

Todas las respuestas

  • Solamente debe poner e.DrawDefault en True si NO desea alterar la apariencia original del nodo.  Supongo que usted es quien preguntó antes acerca de cómo dar colores a los nodos y a quien yo le di la solución.

    Si revisa el código de la personalización, notará que hay un IF.  IF nodo en modo HOT THEN Dibujar personalizado ELSE e.DrawDefault = True END IF.


    Jose R. MCP
    Code Samples

    lunes, 12 de marzo de 2018 19:45
    Moderador
  • Gracias por responder 

    Mira tengo este codigo pero solo me pinta el tamaño de las letras del nodo y cuando lo señalo se me marca en azul

    como podria quitar el azul de tener seleccionado un nodo

    gracias

    Public Class SharxXTreeView
        Inherits TreeView
    
        Public Sub New()
            MyBase.New()
            Me.HotTracking = True
            Me.DrawMode = TreeViewDrawMode.OwnerDrawText
            AddHandler DrawNode, AddressOf Me.SharxXTreeView_DrawNode
        End Sub
    
        Private Sub SharxXTreeView_DrawNode(ByVal sender As Object, ByVal e As DrawTreeNodeEventArgs)
            If ((e.State And TreeNodeStates.Hot) _
                        = TreeNodeStates.Hot) Then
                ' get node font and node fore color
                Dim nodeFont As Font = Me.GetTreeNodeFont(e.Node)
                Dim nodeForeColor As Color = Me.GetTreeNodeForeColor(e.Node, e.State)
                ' fill node background
    
                Dim brush As SolidBrush = New SolidBrush(Color.FromArgb(118, 184, 61))
    
                e.Graphics.FillRectangle(brush, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
                ' draw node text
                TextRenderer.DrawText(e.Graphics, e.Node.Text, nodeFont, e.Bounds, nodeForeColor, (TextFormatFlags.Left Or TextFormatFlags.Top))
                ' draw selected node border
                If ((e.State And TreeNodeStates.Selected) _
                            = TreeNodeStates.Selected) Then
                    Dim pen As Pen = New Pen(nodeForeColor)
                    pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot
                    Dim penBounds As Rectangle = e.Bounds
                    penBounds.Width = (penBounds.Width - 1)
                    penBounds.Height = (penBounds.Height - 1)
                    e.Graphics.DrawRectangle(pen, penBounds)
                End If
    
            Else
                e.DrawDefault = True
            End If
    
        End Sub
    
        Private Function GetTreeNodeFont(ByVal node As TreeNode) As Font
            Dim nodeFont As Font = node.NodeFont
            If (nodeFont Is Nothing) Then
                nodeFont = Me.Font
            End If
    
            Return nodeFont
        End Function
    
        Private Function GetTreeNodeForeColor(ByVal node As TreeNode, ByVal nodeState As TreeNodeStates) As Color
            Dim nodeForeColor As Color = Color.Empty
            If ((nodeState And TreeNodeStates.Selected) _
                        = TreeNodeStates.Selected) Then
                nodeForeColor = Color.FromKnownColor(KnownColor.HighlightText)
            Else
                nodeForeColor = node.ForeColor
                If (nodeForeColor = Color.Empty) Then
                    nodeForeColor = Me.ForeColor
                End If
    
            End If
    
            Return nodeForeColor
        End Function
    End Class

    lunes, 12 de marzo de 2018 21:54
  • Tendría que cambiar la línea:

    Me.DrawMode = TreeViewDrawMode.OwnerDrawText

    Por:

    Me.DrawMode = TreeViewDrawMode.OwnerDrawAll

    Pero eso implica que usted deberá encargarse también de dibujar otros elementos, como por ejemplo el símbolo de + para expandir (o el de - para colapsar) y las líneas punteadas de conexión.  Decisión suya.


    Jose R. MCP
    Code Samples

    lunes, 12 de marzo de 2018 22:03
    Moderador
  • WebJose Gracias por responder

    Pero no consigo

    1º Que al pasar el raton por lo anto de cada node cambien a un color ejemplo negro

    2º que al señalar el nodo se señale solo con el color que quiero ejemplo Verde no el azul que trae predefenido

    Gracias

    miércoles, 14 de marzo de 2018 8:04