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

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
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 -
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
-
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 -
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