无法在 AfterCheck 事件中设置 TreeNode 的 Checked 属性

本文关键字:TreeNode Checked 属性 设置 AfterCheck 事件 | 更新日期: 2023-09-27 17:57:23

我在Vista上的C# 2008(.Net 3.5)中有一个简单的TreeView(几个父母和1个级别的孩子)。

在 AFterCheck 例程中,我尝试根据用鼠标单击父节点时父节点的状态设置/取消设置子节点的 Checked 属性。

使用 MessageBoxes,我可以看到输入的事件例程和子节点的循环,如果选中父节点,则代码

childnode.Checked = parentNode.Checked;

通过 MessageBox.Show(childnode.选中 + " " + 父节点。执行代码后显示"False True",并且子复选框在树视图中保持未选中状态。

我尝试了网络上发现的几种变体,结果相同。 我甚至尝试了替代的TreeView(MWControls),结果完全相同。

有趣的是,我设置的任何其他子节点属性(例如 BackColor)都会生效。

我相信递归不是问题,并且似乎已通过调试消息框进行了验证。

有什么想法吗?

问候吉姆


这是一个通知应用程序。

我删除了所有 MessageBox 调用,没有更改;子节点仍未检查以响应正在检查的父节点。

我删除了我的 AfterCheck 例程,并使用了一个逐引用的例程,结果相同;子节点未检查以响应正在检查的父节点。

我已经玩了几个小时,但没有运气。

奇怪的是,我更改的任何其他属性(如 BackColor)都会生效。

我确实在网络上看到了一个晦涩的参考,认为这是Win7中的一个问题,但我再也找不到了。无论如何,我使用的是Vista,.Net 3.5和C# Express 2008。

感谢您的输入。

问候吉姆

无法在 AfterCheck 事件中设置 TreeNode 的 Checked 属性

此示例可以满足您的需求。很可能您的代码不起作用,因为设置子项的 Checked 属性会再次传播事件,并且您没有像链接到的代码那样检查Unknown操作。