Compartilhar via


TreeView.BeforeCheck Evento

Definição

Ocorre antes que a caixa de seleção do nó de árvore é marcada.

public:
 event System::Windows::Forms::TreeViewCancelEventHandler ^ BeforeCheck;
public event System.Windows.Forms.TreeViewCancelEventHandler BeforeCheck;
public event System.Windows.Forms.TreeViewCancelEventHandler? BeforeCheck;
member this.BeforeCheck : System.Windows.Forms.TreeViewCancelEventHandler 
Public Custom Event BeforeCheck As TreeViewCancelEventHandler 

Tipo de evento

Exemplos

O exemplo de código a seguir atualiza todos os nós de árvore filho de um TreeNode quando o usuário altera seu estado verificado. Esse código requer que você tenha um Form com um TreeView que tenha TreeNode objetos em seu TreeNodeCollection. O TreeNodeCollection deve ter nós de árvore com nós filho.

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

Comentários

Observação

Definir a TreeNode.Checked propriedade de dentro do BeforeCheck evento ou AfterCheck faz com que o evento seja acionado várias vezes e pode resultar em um comportamento inesperado. Por exemplo, você pode definir a Checked propriedade no manipulador de eventos quando estiver atualizando recursivamente os nós filho, para que o usuário não precise expandir e marcar cada um individualmente. Para impedir que o evento seja acionado várias vezes, adicione lógica ao manipulador de eventos que executa apenas o código recursivo se a Action propriedade do TreeViewEventArgs não estiver definida TreeViewAction.Unknowncomo .

Para obter mais informações sobre como lidar com eventos, consulte Manipulando e gerando eventos.

Aplica-se a

Confira também