DrawTreeNodeEventArgs.DrawDefault Property

 
System_CAPS_noteNote

The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.

Gets or sets a value indicating whether the TreeNode should be drawn by the operating system rather than being owner drawn.

Namespace:   System.Windows.Forms
Assembly:  System.Windows.Forms (in System.Windows.Forms.dll)

public bool DrawDefault { get; set; }

Property Value

Type: System.Boolean

true if the node should be drawn by the operating system; false if the node will be drawn in the event handler. The default value is false.

Set this property to true for nodes that you do not want to customize when you handle the DrawNode event. For example, this is useful when you want to customize only nodes that are in a specific state.

The following code example demonstrates the use of this property. In the example, a handler for the TreeView.DrawNode event draws the node tag and a custom highlight color manually for the selected node. Nodes that are not selected do not need customization. For unselected nodes, the DrawDefault property is set to true so that they will be drawn by the operating system and will not have a customized appearance.

System_CAPS_noteNote

If you draw a node manually and also set the DrawDefault property to true, some or all of what you draw may be overwritten by the operating system.

For the complete example, see the DrawTreeNodeEventArgs overview reference topic.

// Draws a node.
private void myTreeView_DrawNode(
    object sender, DrawTreeNodeEventArgs e)
{
    // Draw the background and node text for a selected node.
    if ((e.State & TreeNodeStates.Selected) != 0)
    {
        // Draw the background of the selected node. The NodeBounds
        // method makes the highlight rectangle large enough to
        // include the text of a node tag, if one is present.
        e.Graphics.FillRectangle(Brushes.Green, NodeBounds(e.Node));

        // Retrieve the node font. If the node font has not been set,
        // use the TreeView font.
        Font nodeFont = e.Node.NodeFont;
        if (nodeFont == null) nodeFont = ((TreeView)sender).Font;

        // Draw the node text.
        e.Graphics.DrawString(e.Node.Text, nodeFont, Brushes.White,
            Rectangle.Inflate(e.Bounds, 2, 0));
    }

    // Use the default background and node text.
    else 
    {
        e.DrawDefault = true;
    }

    // If a node tag is present, draw its string representation 
    // to the right of the label text.
    if (e.Node.Tag != null)
    {
        e.Graphics.DrawString(e.Node.Tag.ToString(), tagFont,
            Brushes.Yellow, e.Bounds.Right + 2, e.Bounds.Top);
    }

    // If the node has focus, draw the focus rectangle large, making
    // it large enough to include the text of the node tag, if present.
    if ((e.State & TreeNodeStates.Focused) != 0)
    {
        using (Pen focusPen = new Pen(Color.Black))
        {
            focusPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
            Rectangle focusBounds = NodeBounds(e.Node);
            focusBounds.Size = new Size(focusBounds.Width - 1, 
            focusBounds.Height - 1);
            e.Graphics.DrawRectangle(focusPen, focusBounds);
        }
    }
}

.NET Framework
Available since 2.0
Return to top
Show: