DrawTreeNodeEventArgs.State 属性

定义

获取要绘制的 TreeNode 的当前状态。Gets the current state of the TreeNode to draw.

public:
 property System::Windows::Forms::TreeNodeStates State { System::Windows::Forms::TreeNodeStates get(); };
public System.Windows.Forms.TreeNodeStates State { get; }
member this.State : System.Windows.Forms.TreeNodeStates
Public ReadOnly Property State As TreeNodeStates

属性值

TreeNodeStates 值的按位组合,指示 TreeNode 的当前状态。A bitwise combination of the TreeNodeStates values indicating the current state of the TreeNode.

示例

下面的代码示例演示如何使用所有者描述TreeView自定义控件。The following code example demonstrates how to customize a TreeView control using owner drawing. 该示例中的控件在标准节点标签旁边显示可选节点标记。TreeViewThe TreeView control in the example displays optional node tags alongside the standard node labels. 节点标记是使用属性指定TreeNode.Tag的。Node tags are specified using the TreeNode.Tag property. TreeView控件还使用自定义的突出显示颜色。The TreeView control also uses custom colors, including a custom highlight color.

您可以通过设置颜色属性TreeView自定义大多数颜色, 但无法将选择突出显示颜色作为属性提供。You can customize most of the TreeView colors by setting color properties, but the selection highlight color is not available as a property. 此外, 默认选择突出显示矩形仅扩展到节点标签周围。Additionally, the default selection highlight rectangle extends only around a node label. 必须使用所有者绘图来绘制节点标记, 并绘制一个足以容纳节点标记的自定义突出显示矩形。Owner drawing must be used to draw the node tags and to draw a customized highlight rectangle large enough to include a node tag.

在此示例中, TreeView.DrawNode事件的处理程序手动绘制节点标记和自定义选择突出显示。In the example, a handler for the TreeView.DrawNode event draws the node tags and the custom selection highlight manually. 未选定的节点不需要自定义。Unselected nodes do not need customization. 对于这些DrawDefault属性, 将属性设置为true , 以使其由操作系统进行绘制。For these, the DrawDefault property is set to true so that they will be drawn by the operating system.

有关完整示例, 请参阅DrawTreeNodeEventArgs概述参考主题。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) != (TreeNodeStates)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.
         System::Drawing::Font^ nodeFont = e->Node->NodeFont;
         if ( nodeFont == nullptr )
                  nodeFont = (dynamic_cast<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 != nullptr )
      {
         e->Graphics->DrawString( e->Node->Tag->ToString(), tagFont, Brushes::Yellow, (float)e->Bounds.Right + 2, (float)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) != (TreeNodeStates)0 )
      {
         Pen^ focusPen = gcnew Pen( Color::Black );
         try
         {
            focusPen->DashStyle = System::Drawing::Drawing2D::DashStyle::Dot;
            Rectangle focusBounds = NodeBounds( e->Node );
            focusBounds.Size = System::Drawing::Size( focusBounds.Width - 1, focusBounds.Height - 1 );
            e->Graphics->DrawRectangle( focusPen, focusBounds );
         }
         finally
         {
            if ( focusPen )
               delete safe_cast<IDisposable^>(focusPen);
         }

      }
   }
// 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);
        }
    }
}
' Draws a node.
Private Sub myTreeView_DrawNode(ByVal sender As Object, _
    ByVal e As DrawTreeNodeEventArgs) Handles myTreeView.DrawNode

    ' Draw the background and node text for a selected node.
    If (e.State And TreeNodeStates.Selected) <> 0 Then

        ' 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.
        Dim nodeFont As Font = e.Node.NodeFont
        If nodeFont Is Nothing Then
            nodeFont = CType(sender, TreeView).Font
        End If

        ' Draw the node text.
        e.Graphics.DrawString(e.Node.Text, nodeFont, Brushes.White, _
            e.Bounds.Left - 2, e.Bounds.Top)

    ' Use the default background and node text.
    Else
        e.DrawDefault = True
    End If

    ' If a node tag is present, draw its string representation 
    ' to the right of the label text.
    If (e.Node.Tag IsNot Nothing) Then
        e.Graphics.DrawString(e.Node.Tag.ToString(), tagFont, _
            Brushes.Yellow, e.Bounds.Right + 2, e.Bounds.Top)
    End If

    ' 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 And TreeNodeStates.Focused) <> 0 Then
        Dim focusPen As New Pen(Color.Black)
        Try
            focusPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot
            Dim focusBounds As Rectangle = NodeBounds(e.Node)
            focusBounds.Size = New Size(focusBounds.Width - 1, _
                focusBounds.Height - 1)
            e.Graphics.DrawRectangle(focusPen, focusBounds)
        Finally
            focusPen.Dispose()
        End Try
    End If

End Sub

注解

使用此属性检查要绘制的TreeNode对象是否处于特定状态。Use this property to check whether the TreeNode object to draw is in a particular state. 此属性仅提供有关节点的基本状态信息。This property provides only basic state information about the node. 例如, 您可以使用此属性来确定节点是否处于选中状态、选中状态或焦点。You can use this property, for example, to determine whether a node is selected, checked, or focused. 如果需要了解详细信息, 请通过Node属性检索节点。If you need to know more, retrieve the node through the Node property. 例如, 若要确定节点是否已展开, 必须检索节点并检查TreeNode.IsExpanded属性。For example, to determine whether the node is expanded, you must retrieve the node and check the TreeNode.IsExpanded property.

适用于

另请参阅