public:
 event System::Windows::Forms::TreeViewEventHandler ^ AfterCheck;
public event System.Windows.Forms.TreeViewEventHandler AfterCheck;
member this.AfterCheck : System.Windows.Forms.TreeViewEventHandler 
Public Custom Event AfterCheck As TreeViewEventHandler 

下面的代码示例在用户更改其选中状态时更新 的所有子树节点 TreeNode 。 此代码要求具有 Form 的 , TreeView TreeNodeCollection 中具有 TreeNode 对象。 应 TreeNodeCollection 具有具有子节点的树节点。

// Updates all child tree nodes recursively. void CheckAllChildNodes( TreeNode^ treeNode, bool nodeChecked ) IEnumerator^ myEnum = treeNode->Nodes->GetEnumerator(); while ( myEnum->MoveNext() ) TreeNode^ node = safe_cast<TreeNode^>(myEnum->Current); node->Checked = nodeChecked; if ( node->Nodes->Count > 0 ) // If the current node has child nodes, call the CheckAllChildsNodes method recursively. this->CheckAllChildNodes( node, nodeChecked ); // NOTE This code can be added to the BeforeCheck event handler instead of the AfterCheck event. // After a tree node's Checked property is changed, all its child nodes are updated to the same value. void node_AfterCheck( Object^ /*sender*/, TreeViewEventArgs^ e ) // The code only executes if the user caused the checked state to change. if ( e->Action != TreeViewAction::Unknown ) if ( e->Node->Nodes->Count > 0 ) /* Calls the CheckAllChildNodes method, passing in the current Checked value of the TreeNode whose checked state changed. */ this->CheckAllChildNodes( e->Node, e->Node->Checked ); // Updates all child tree nodes recursively. private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked) foreach(TreeNode node in treeNode.Nodes) node.Checked = nodeChecked; if(node.Nodes.Count > 0) // If the current node has child nodes, call the CheckAllChildsNodes method recursively. this.CheckAllChildNodes(node, nodeChecked); // NOTE This code can be added to the BeforeCheck event handler instead of the AfterCheck event. // After a tree node's Checked property is changed, all its child nodes are updated to the same value. private void node_AfterCheck(object sender, TreeViewEventArgs e) // The code only executes if the user caused the checked state to change. if(e.Action != TreeViewAction.Unknown) if(e.Node.Nodes.Count > 0) /* Calls the CheckAllChildNodes method, passing in the current Checked value of the TreeNode whose checked state changed. */ this.CheckAllChildNodes(e.Node, e.Node.Checked); ' Updates all child tree nodes recursively. Private Sub CheckAllChildNodes(treeNode As TreeNode, nodeChecked As Boolean) Dim node As TreeNode For Each node In treeNode.Nodes node.Checked = nodeChecked If node.Nodes.Count > 0 Then ' If the current node has child nodes, call the CheckAllChildsNodes method recursively. Me.CheckAllChildNodes(node, nodeChecked) End If Next node End Sub ' NOTE This code can be added to the BeforeCheck event handler instead of the AfterCheck event. ' After a tree node's Checked property is changed, all its child nodes are updated to the same value. Private Sub node_AfterCheck(sender As Object, e As TreeViewEventArgs) Handles treeView1.AfterCheck ' The code only executes if the user caused the checked state to change. If e.Action <> TreeViewAction.Unknown Then If e.Node.Nodes.Count > 0 Then ' Calls the CheckAllChildNodes method, passing in the current ' Checked value of the TreeNode whose checked state changed. Me.CheckAllChildNodes(e.Node, e.Node.Checked) End If End If End Sub

TreeNode.Checked 从 或 AfterCheck 事件处理程序中 BeforeCheck 设置 属性会导致多次引发事件,并可能导致意外行为。 若要防止多次引发事件,请将逻辑添加到事件处理程序,该处理程序仅在 的 属性 TreeViewEventArgs 未设置为 TreeViewAction.Unknown Action 执行递归代码。

有关处理事件的详细信息,请参阅 处理和引发事件