2012-04-20 123 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