TreeView.BeforeCollapse Olay

Tanım

Ağaç düğümü daraltılmadan önce gerçekleşir.

C#
public event System.Windows.Forms.TreeViewCancelEventHandler BeforeCollapse;
C#
public event System.Windows.Forms.TreeViewCancelEventHandler? BeforeCollapse;

Olay Türü

Örnekler

Aşağıdaki kod örneği, denetlenen tüm düğümlerin görünür olması için daraltma TreeView durumunun nasıl değiştirildiğini gösterir. İlk olarak, tüm düğümler genişletilir ve olay için BeforeCollapse bir işleyici eklenir. Ardından tüm düğümler daraltılır. Olay işleyicisi BeforeCollapse , belirli bir düğümün denetlenen alt düğümlere sahip olup olmadığını belirler. Bir düğüm alt öğeleri denetlediyse, bu düğüm için daraltma iptal edilir. Bir düğümün yanındaki eksi işaretine tıklandığında standart düğümün daraltılmasını sağlamak için olay BeforeCollapse işleyicisi kaldırılır.

Bu davranış, söz konusu konuya ilişkin BeforeExpand örnekte gösterildiği gibi olayı işleyerek de uygulanabilir.

Tam örnek için oluşturucu başvuru konusuna TreeView bakın.

C#
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.ExpandAll();

    // Add the checkForCheckedChildren event handler to the BeforeExpand event.
    treeView1.BeforeCollapse += checkForCheckedChildren;

    // Expand all nodes of treeView1. Nodes without checked children are 
    // prevented from expanding by the checkForCheckedChildren event handler.
    treeView1.CollapseAll();

    // Remove the checkForCheckedChildren event handler from the BeforeExpand 
    // event so manual node expansion will work correctly.
    treeView1.BeforeCollapse -= checkForCheckedChildren;

    // Enable redrawing of treeView1.
    treeView1.EndUpdate();
}

// Prevent collapse of a node that has 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;
}

Açıklamalar

Olayları işleme hakkında daha fazla bilgi için bkz. Olayları İşleme ve Oluşturma.

Şunlara uygulanır

Ürün Sürümler
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10

Ayrıca bkz.