【发布时间】:2010-07-20 12:49:13
【问题描述】:
我的项目是 WinForms,C#。
我有一个带有 TreeView 的表单,其中 CheckBoxes 设置为 true。有几个根节点,每个都有多个子节点。
我希望所有子节点都具有与其父节点相同的选中/未选中状态。我编写了以下事件处理程序:
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
// return in case the event is induced by the code below
if (e.Action == TreeViewAction.Unknown)
{
return;
}
System.Diagnostics.Debug.WriteLine(string.Format("Checked - {0}", e.Node.Checked));
foreach (TreeNode subNode in e.Node.Nodes)
{
subNode.Checked = e.Node.Checked;
}
}
但是,当快速单击父级时,这会很奇怪。我可以通过快速检查和取消选中父节点来轻松重现这一点,以便在父节点已经取消选中时所有子节点都被选中。
如何更正确地做到这一点?
【问题讨论】:
-
快速点击好像没有调用这个事件。我添加了 System.Diagnostics.Debug.WriteLine(string.Format("Checked - {0}", e.Node.Checked));到第一行,第二次(取消选中)单击时看不到“已选中 - 错误”。
-
如果我覆盖了双击行为,我只能重现此行为。否则,快速单击只会扩展/收缩您正在单击的节点。
-
中士,快速点击复选框,而不是项目文本。它不应展开或折叠。