2012-04-20 122 views
1

我有一个树状图,利用StateImageList在树中实现“正确的”三态检查。然而问题是添加到树中的第一层节点。默认情况下,新TreeNode上的StateImageIndex是-1,我无法真正知道它们已被添加。作为子节点的节点我可以捕捉到BeforeExpand并正确设置StateImageIndex,但我似乎无法弄清楚如何处理顶层节点。是否有可能知道节点何时添加到树视图?

我目前的工作(我真的很讨厌)是我有一个计时器运行在后台检查,看看树状结构中的节点数量是否发生了变化,如果它已经运行并找到所有的根节点有一个StateImageIndex设置为-1并将它们设置为0.它的工作原理,但它似乎是一个可怕的资源浪费。任何人有更好的建议?

+0

OP正在做一个控制,而不仅仅是在他的程序中使用一个。 – 2012-04-20 00:58:00

回答

3

没有事件,你也不能生成一个。本地控件不支持事件,因为只有代码可以添加节点,而不是用户。你不能生成一个,因为你不能进入TreeNodeCollection类。一个简单的解决方法是将静态CreateNode()工厂方法添加到您的类中,并期望客户端代码使用该方法创建正确初始化的节点。

您应该考虑DrawMode属性,以便您可以按照需要的方式绘制节点。 HitTest()检测点击,ControlPaint.DrawCheckBox()绘制框。

+0

太棒了!我已经绘制了treenode的一部分,所以我使用DrawMode = OwnerDrawnText ...如果StateImageIndex = -1,我可以在那里检查...非常感谢! – 2012-04-20 01:15:40