0

cbNode5在包含 5 个子节点的 TreeView 中有一个节点,我试图以某种方式捕获选中和取消选中,cbNode5以便我可以标记子节点并选中/取消选中以匹配父节点。我知道如何通过节点来检查/取消选中子节点,但我无法弄清楚当用户通过鼠标单击或键盘选中复选框时触发的事件是什么以及如何捕获。

我已经尝试了 AfterCheck 事件,但它似乎没有工作(而且我知道将复选框设置为 true 的行,因为它在其他事件下运行良好):

private void tvSteps_AfterCheck(object sender, TreeViewEventArgs e)
{
    tvSteps.Nodes["cbStep1"].Checked = true;
}
4

4 回答 4

3

看看AfterCheck事件...

AfterCheck() 事件对我来说工作正常:

    private void tvSteps_AfterCheck(object sender, TreeViewEventArgs e)
    {
        if (e.Node.Name == "cbNode5")
        {
            foreach (TreeNode tn in e.Node.Nodes)
            {
                tn.Checked = e.Node.Checked;
            }
        }
    }

当我选中/取消选中 cbNode5 时,它的子节点会选中/取消选中以匹配它。

你确定你使用的密钥是正确的吗?

于 2013-10-03T20:24:05.217 回答
1

我想指出,我通过进入我的TreeViewForm.Designer.CS,InitializeComponent函数并将以下行添加到导致问题的树视图对象的属性中解决了这个问题:

this.treeView1.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterCheck);

请注意,您的对象名称将与我自己的不同。由于某种原因,AfterSelect事件处理程序以编程方式添加到我的表单的 Designer.CS 文件中,但我的AfterCheck事件处理程序没有。

于 2018-04-17T18:11:42.417 回答
0

尝试这个

TreeView.AfterCheck 事件

于 2013-10-03T20:26:19.257 回答
0

要完成此任务,您可以处理 TreeList.AfterCheckNode 事件并手动设置 TreeListNode.Checked 属性。这是一个示例代码片段:

private void treeList1_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)  
{  
   if (e.Node.ParentNode != null)  
      e.Node.ParentNode.Checked = IsAllChecked(e.Node.ParentNode.Nodes);  
   else  
      SetCheckedChildNodes(e.Node.Nodes);  
}  
private void SetCheckedChildNodes(TreeListNodes nodes)  
{  
    foreach (TreeListNode node in nodes)  
      node.Checked = node.ParentNode.Checked;  
}  
private bool IsAllChecked(DevExpress.XtraTreeList.Nodes.TreeListNodes nodes)  
{  
    bool value = true;  
    foreach (TreeListNode node in nodes)  
    {  
        if (!node.Checked)  
        {  
           value = false;  
           break;  
        }  
     }  
     return value;  
}  
于 2021-08-18T06:35:06.780 回答