Actualización: noviembre 2007
Proporciona datos para los eventos BeforeCheck, BeforeCollapse, BeforeExpand y BeforeSelect de un control TreeView.
Ensamblado: System.Windows.Forms (en System.Windows.Forms.dll)
Public Class TreeViewCancelEventArgs _ Inherits CancelEventArgs
Dim instance As TreeViewCancelEventArgs
public class TreeViewCancelEventArgs : CancelEventArgs
public ref class TreeViewCancelEventArgs : public CancelEventArgs
public class TreeViewCancelEventArgs extends CancelEventArgs
public class TreeViewCancelEventArgs extends CancelEventArgs
Para obtener más información sobre la forma de controlar eventos, vea Utilizar eventos.
En el siguiente ejemplo se muestra cómo cambiar el estado de contracción de TreeView de modo que se vean todos los nodos activados. Primero, todos los nodos están contraídos y se agrega un controlador al evento TreeView.BeforeExpand. A continuación, se expanden todos los nodos. El controlador de eventos TreeView.BeforeExpand determina si un nodo dado tiene nodos secundarios que están activados. Si un nodo no tiene nodos secundarios activados, se cancela la expansión para dicho nodo. Para que un nodo normal se expanda cuando se hace clic en el signo más situado junto al nodo, se quita el controlador de eventos TreeView.BeforeExpand.
Este comportamiento se puede implementar también controlando el evento TreeView.BeforeCollapse, tal y como se muestra en el ejemplo correspondiente a dicho tema.
Para obtener el ejemplo completo, vea el tema referente a TreeView.CheckBoxes.
Private Sub showCheckedNodesButton_Click(ByVal sender As Object, ByVal e As EventArgs) ' Disable redrawing of treeView1 to prevent flickering ' while changes are made. treeView1.BeginUpdate() ' Collapse all nodes of treeView1. treeView1.CollapseAll() ' Add the CheckForCheckedChildren event handler to the BeforeExpand event. AddHandler treeView1.BeforeExpand, AddressOf CheckForCheckedChildren ' Expand all nodes of treeView1. Nodes without checked children are ' prevented from expanding by the checkForCheckedChildren event handler. treeView1.ExpandAll() ' Remove the checkForCheckedChildren event handler from the BeforeExpand ' event so manual node expansion will work correctly. RemoveHandler treeView1.BeforeExpand, AddressOf CheckForCheckedChildren ' Enable redrawing of treeView1. treeView1.EndUpdate() End Sub 'showCheckedNodesButton_Click ' Prevent expansion of a node that does not have any checked child nodes. Private Sub CheckForCheckedChildren(ByVal sender As Object, ByVal e As TreeViewCancelEventArgs) If Not HasCheckedChildNodes(e.Node) Then e.Cancel = True End If End Sub 'CheckForCheckedChildren ' Returns a value indicating whether the specified ' TreeNode has checked child nodes. Private Function HasCheckedChildNodes(ByVal node As TreeNode) As Boolean If node.Nodes.Count = 0 Then Return False End If Dim childNode As TreeNode For Each childNode In node.Nodes If childNode.Checked Then Return True End If ' Recursively check the children of the current child node. If HasCheckedChildNodes(childNode) Then Return True End If Next childNode Return False End Function 'HasCheckedChildNodes
private void showCheckedNodesButton_Click(object sender, EventArgs e) { // Disable redrawing of treeView1 to prevent flickering // while changes are made. treeView1.BeginUpdate(); // Collapse all nodes of treeView1. treeView1.CollapseAll(); // Add the checkForCheckedChildren event handler to the BeforeExpand event. treeView1.BeforeExpand += checkForCheckedChildren; // Expand all nodes of treeView1. Nodes without checked children are // prevented from expanding by the checkForCheckedChildren event handler. treeView1.ExpandAll(); // Remove the checkForCheckedChildren event handler from the BeforeExpand // event so manual node expansion will work correctly. treeView1.BeforeExpand -= checkForCheckedChildren; // Enable redrawing of treeView1. treeView1.EndUpdate(); } // Prevent expansion of a node that does not have any checked child nodes. private void CheckForCheckedChildrenHandler(object sender, TreeViewCancelEventArgs e) { if (!HasCheckedChildNodes(e.Node)) e.Cancel = true; } // Returns a value indicating whether the specified // TreeNode has checked child nodes. private bool HasCheckedChildNodes(TreeNode node) { if (node.Nodes.Count == 0) return false; foreach (TreeNode childNode in node.Nodes) { if (childNode.Checked) return true; // Recursively check the children of the current child node. if (HasCheckedChildNodes(childNode)) return true; } return false; }
private: void showCheckedNodesButton_Click( Object^ /*sender*/, EventArgs^ /*e*/ ) { // Disable redrawing of treeView1 to prevent flickering // while changes are made. treeView1->BeginUpdate(); // Collapse all nodes of treeView1. treeView1->CollapseAll(); // Add the checkForCheckedChildren event handler to the BeforeExpand event. treeView1->BeforeExpand += checkForCheckedChildren; // Expand all nodes of treeView1. Nodes without checked children are // prevented from expanding by the checkForCheckedChildren event handler. treeView1->ExpandAll(); // Remove the checkForCheckedChildren event handler from the BeforeExpand // event so manual node expansion will work correctly. treeView1->BeforeExpand -= checkForCheckedChildren; // Enable redrawing of treeView1. treeView1->EndUpdate(); } // Prevent expansion of a node that does not have any checked child nodes. void CheckForCheckedChildrenHandler( Object^ /*sender*/, TreeViewCancelEventArgs^ e ) { if ( !HasCheckedChildNodes( e->Node ) ) e->Cancel = true; } // Returns a value indicating whether the specified // TreeNode has checked child nodes. bool HasCheckedChildNodes( TreeNode^ node ) { if ( node->Nodes->Count == 0 ) return false; System::Collections::IEnumerator^ myEnum = node->Nodes->GetEnumerator(); while ( myEnum->MoveNext() ) { TreeNode^ childNode = safe_cast<TreeNode^>(myEnum->Current); if ( childNode->Checked ) return true; // Recursively check the children of the current child node. if ( HasCheckedChildNodes( childNode ) ) return true; } return false; }
private void showCheckedNodesButton_Click(Object sender, EventArgs e)
{
// Disable redrawing of treeView1 to prevent flickering
// while changes are made.
treeView1.BeginUpdate();
// Collapse all nodes of treeView1.
treeView1.CollapseAll();
// Add the checkForCheckedChildren event handler to the
// BeforeExpand event.
treeView1.add_BeforeExpand(checkForCheckedChildren);
// Expand all nodes of treeView1. Nodes without checked children are
// prevented from expanding by the checkForCheckedChildren event handler.
treeView1.ExpandAll();
// Remove the checkForCheckedChildren event handler from
// the BeforeExpand
// event so manual node expansion will work correctly.
treeView1.remove_BeforeExpand(checkForCheckedChildren);
// Enable redrawing of treeView1.
treeView1.EndUpdate();
} //showCheckedNodesButton_Click
// Prevent expansion of a node that does not have any checked child nodes.
private void CheckForCheckedChildrenHandler(Object sender,
TreeViewCancelEventArgs e)
{
if (!(HasCheckedChildNodes(e.get_Node()))) {
e.set_Cancel(true);
}
} //CheckForCheckedChildrenHandler
// Returns a value indicating whether the specified
// TreeNode has checked child nodes.
private boolean HasCheckedChildNodes(TreeNode node)
{
if (node.get_Nodes().get_Count() == 0) {
return false;
}
for (int iCtr = 0; iCtr < node.get_Nodes().get_Count(); iCtr++) {
TreeNode childNode = node.get_Nodes().get_Item(iCtr);
if (childNode.get_Checked()) {
return true;
}
// Recursively check the children of the current child node.
if (HasCheckedChildNodes(childNode)) {
return true;
}
}
return false;
} //HasCheckedChildNodes
System.EventArgs
System.ComponentModel.CancelEventArgs
System.Windows.Forms.TreeViewCancelEventArgs
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC
.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.