TreeView.GetNodeAt 方法

定义

检索位于指定位置的树节点。Retrieves the tree node that is at the specified location.

重载

GetNodeAt(Point)

检索位于指定点的树节点。Retrieves the tree node that is at the specified point.

GetNodeAt(Int32, Int32)

检索位于指定点(以坐标表示)的树节点。Retrieves the tree node at the point with the specified coordinates.

GetNodeAt(Point)

检索位于指定点的树节点。Retrieves the tree node that is at the specified point.

public:
 System::Windows::Forms::TreeNode ^ GetNodeAt(System::Drawing::Point pt);
public System.Windows.Forms.TreeNode GetNodeAt (System.Drawing.Point pt);
member this.GetNodeAt : System.Drawing.Point -> System.Windows.Forms.TreeNode
Public Function GetNodeAt (pt As Point) As TreeNode

参数

pt
Point

要从其计算和检索节点的 PointThe Point to evaluate and retrieve the node from.

返回

TreeNode

位于以树视图(客户端)坐标表示的指定点的 TreeNode,或在该位置没有节点时为 nullThe TreeNode at the specified point, in tree view (client) coordinates, or null if there is no node at that location.

注解

可以将事件的 MouseEventArgs.XMouseEventArgs.Y 坐标 MouseDown 作为 X 新的和值传递 Y PointYou can pass the MouseEventArgs.X and MouseEventArgs.Y coordinates of the MouseDown event as the X and Y values of a new Point.

另请参阅

适用于

GetNodeAt(Int32, Int32)

检索位于指定点(以坐标表示)的树节点。Retrieves the tree node at the point with the specified coordinates.

public:
 System::Windows::Forms::TreeNode ^ GetNodeAt(int x, int y);
public System.Windows.Forms.TreeNode GetNodeAt (int x, int y);
member this.GetNodeAt : int * int -> System.Windows.Forms.TreeNode
Public Function GetNodeAt (x As Integer, y As Integer) As TreeNode

参数

x
Int32

要从其计算和检索节点的 X 位置。The X position to evaluate and retrieve the node from.

y
Int32

要从其计算和检索节点的 Y 位置。The Y position to evaluate and retrieve the node from.

返回

TreeNode

位于以树视图(客户端)坐标表示的指定位置的 TreeNode,或在该位置没有节点时为 nullThe TreeNode at the specified location, in tree view (client) coordinates, or null if there is no node at that location.

示例

下面的代码示例允许用户使用编辑 nonroot 树节点 ContextMenuThe following code example lets the user edit nonroot tree nodes by using a ContextMenu. 当用户右键单击鼠标时, TreeNode 位于该位置的将确定并存储在一个名为的变量中 mySelectedNodeWhen the user right clicks the mouse, the TreeNode at that position is determined and stored in a variable named mySelectedNode. 如果选择了 nonroot 树节点,则会将其置于可编辑状态,从而允许用户编辑节点标签。If a nonroot tree node was selected, it is put into an editable state, which allows the user to edit the node label. 用户停止编辑树节点标签后,将计算并保存新的标签文本。After the user stops editing the tree node label, the new label text is evaluated and saved. 在此示例中,多个字符在标签文本中被视为无效。For this example, several characters are considered not valid in the label text. 如果标签字符串中有一个无效字符,或者字符串为空,则会向用户发送错误通知,并将标签返回到其之前的文本。If one of the invalid characters is in the label string, or the string is empty, the user is notified of the error and the label is returned to its previous text.

   /* Get the tree node under the mouse pointer and 
      save it in the mySelectedNode variable. */
private:
   void treeView1_MouseDown( Object^ /*sender*/, System::Windows::Forms::MouseEventArgs^ e )
   {
      mySelectedNode = treeView1->GetNodeAt( e->X, e->Y );
   }

   void menuItem1_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
   {
      if ( mySelectedNode != nullptr && mySelectedNode->Parent != nullptr )
      {
         treeView1->SelectedNode = mySelectedNode;
         treeView1->LabelEdit = true;
         if (  !mySelectedNode->IsEditing )
         {
            mySelectedNode->BeginEdit();
         }
      }
      else
      {
         MessageBox::Show( String::Concat( "No tree node selected or selected node is a root node.\n",
            "Editing of root nodes is not allowed." ), "Invalid selection" );
      }
   }

   void treeView1_AfterLabelEdit( Object^ /*sender*/,
      System::Windows::Forms::NodeLabelEditEventArgs^ e )
   {
      if ( e->Label != nullptr )
      {
         if ( e->Label->Length > 0 )
         {
            array<Char>^ temp0 = {'@','.',',','!'};
            if ( e->Label->IndexOfAny( temp0 ) == -1 )
            {
               
               // Stop editing without canceling the label change.
               e->Node->EndEdit( false );
            }
            else
            {
               /* Cancel the label edit action, inform the user, and 
                  place the node in edit mode again. */
               e->CancelEdit = true;
               MessageBox::Show( String::Concat( "Invalid tree node label.\n",
                  "The invalid characters are: '@','.', ',', '!'" ),
                  "Node Label Edit" );
               e->Node->BeginEdit();
            }
         }
         else
         {
            /* Cancel the label edit action, inform the user, and 
               place the node in edit mode again. */
            e->CancelEdit = true;
            MessageBox::Show( "Invalid tree node label.\nThe label cannot be blank",
               "Node Label Edit" );
            e->Node->BeginEdit();
         }
      }
   }
/* Get the tree node under the mouse pointer and
   save it in the mySelectedNode variable. */
private void treeView1_MouseDown(object sender,
  System.Windows.Forms.MouseEventArgs e)
{
   mySelectedNode = treeView1.GetNodeAt(e.X, e.Y);
}

private void menuItem1_Click(object sender, System.EventArgs e)
{
   if (mySelectedNode != null && mySelectedNode.Parent != null)
   {
      treeView1.SelectedNode = mySelectedNode;
      treeView1.LabelEdit = true;
      if(!mySelectedNode.IsEditing)
      {
         mySelectedNode.BeginEdit();
      }
   }
   else
   {
      MessageBox.Show("No tree node selected or selected node is a root node.\n" +
         "Editing of root nodes is not allowed.", "Invalid selection");
   }
}

private void treeView1_AfterLabelEdit(object sender,
         System.Windows.Forms.NodeLabelEditEventArgs e)
{
   if (e.Label != null)
   {
     if(e.Label.Length > 0)
     {
        if (e.Label.IndexOfAny(new char[]{'@', '.', ',', '!'}) == -1)
        {
           // Stop editing without canceling the label change.
           e.Node.EndEdit(false);
        }
        else
        {
           /* Cancel the label edit action, inform the user, and
              place the node in edit mode again. */
           e.CancelEdit = true;
           MessageBox.Show("Invalid tree node label.\n" +
              "The invalid characters are: '@','.', ',', '!'",
              "Node Label Edit");
           e.Node.BeginEdit();
        }
     }
     else
     {
        /* Cancel the label edit action, inform the user, and
           place the node in edit mode again. */
        e.CancelEdit = true;
        MessageBox.Show("Invalid tree node label.\nThe label cannot be blank",
           "Node Label Edit");
        e.Node.BeginEdit();
     }
   }
}
' Get the tree node under the mouse pointer and
' save it in the mySelectedNode variable. 
Private Sub treeView1_MouseDown(sender As Object, _
  e As System.Windows.Forms.MouseEventArgs)
        
   mySelectedNode = treeView1.GetNodeAt(e.X, e.Y)
End Sub    
    
Private Sub menuItem1_Click(sender As Object, e As System.EventArgs)
   If Not (mySelectedNode Is Nothing) And _
     Not (mySelectedNode.Parent Is Nothing) Then
      treeView1.SelectedNode = mySelectedNode
      treeView1.LabelEdit = True
      If Not mySelectedNode.IsEditing Then
         mySelectedNode.BeginEdit()
      End If
   Else
      MessageBox.Show("No tree node selected or selected node is a root node." & _
        Microsoft.VisualBasic.ControlChars.Cr & _
        "Editing of root nodes is not allowed.", "Invalid selection")
   End If
End Sub    
    
Private Sub treeView1_AfterLabelEdit(sender As Object, _
  e As System.Windows.Forms.NodeLabelEditEventArgs)
   If Not (e.Label Is Nothing) Then
      If e.Label.Length > 0 Then
         If e.Label.IndexOfAny(New Char() {"@"c, "."c, ","c, "!"c}) = -1 Then
            ' Stop editing without canceling the label change.
            e.Node.EndEdit(False)
         Else
            ' Cancel the label edit action, inform the user, and
            ' place the node in edit mode again. 
            e.CancelEdit = True
            MessageBox.Show("Invalid tree node label." & _
              Microsoft.VisualBasic.ControlChars.Cr & _
              "The invalid characters are: '@','.', ',', '!'", _
              "Node Label Edit")
            e.Node.BeginEdit()
         End If
      Else
         ' Cancel the label edit action, inform the user, and
         ' place the node in edit mode again. 
         e.CancelEdit = True
         MessageBox.Show("Invalid tree node label." & _
           Microsoft.VisualBasic.ControlChars.Cr & _
           "The label cannot be blank", "Node Label Edit")
           e.Node.BeginEdit()
      End If
   End If
End Sub 

注解

可以将事件的 MouseEventArgs.XMouseEventArgs.Y 坐标 MouseDown 作为 xy 参数传递。You can pass the MouseEventArgs.X and MouseEventArgs.Y coordinates of the MouseDown event as the x and y parameters.

另请参阅

适用于