我在Vista上的C#2008(.Net 3.5)中有一个简单的TreeView(几个父母和一个孩子级别)。
在AFterCheck例程中,我试图根据用鼠标点击父节点时父节点的状态来设置/取消设置子节点的Checked属性。
使用MessageBoxes,我可以看到输入的事件例程和循环子节点,如果选中了父节点,则代码
childnode.Checked = parentNode.Checked;
通过MessageBox.Show(childnode.Checked +“”+ parentNode.Checked)显示;执行代码后显示“False True”,并且TreeView中的子复选框保持未选中状态。
我尝试过在网络上发现的几种变体,结果相同。我甚至尝试了替换TreeView(MWControls)的结果完全相同。
有趣的是,我设置的任何其他childnode属性(比如BackColor)都会生效。
我认为递归不是问题,似乎可以通过调试MessageBox来验证。
有什么想法吗?
此致 吉姆
这是一个winform应用程序。
我删除了所有没有更改的MessageBox调用;仍未检查子节点以响应正在检查的父节点。
我删除了我的AfterCheck例程,并使用了引用 verbatum 的例程,结果相同;未检查子节点以响应正在检查的父节点。
我已经玩了几个小时而没有运气。
奇怪的是,我改变的任何其他属性(如BackColor)都会生效。
我确实在网络上看到了一个模糊的引用,这是Win7中的一个问题,但我再也找不到了。无论如何,我使用的是Vista,.Net 3.5和C#Express 2008。
感谢您的投入。
此致 吉姆
答案 0 :(得分:1)
This example做你需要的。很可能您的代码无法正常工作,因为设置子项的Checked属性会再次传播该事件,并且您不会像链接代码那样检查Unknown
操作。