2012-04-20 4 views
1

私はStateImageListを使ってツリー内に「適切な」3状態チェックを実装するツリービューを持っています。ただし、問題はツリーに追加されるノードの最初の層です。デフォルトでは、新しいTreeNodeのStateImageIndexは-1であり、追加されたことを実際に知る方法はありません。子ノードであるノード私はBeforeExpandを捕捉してStateImageIndexを適切に設定できますが、ノードのTop Layerについて何をすべきか把握しているようです。ノードがツリービューに追加された時期を知ることはできますか?

私の現在の回避策(私は本当に嫌いです)は、ツリービューのノード数が変化したかどうかをバックグラウンドでチェックしています。実行してすべてのルートノードを見つけたらStateImageIndexが-1に設定され、0に設定されています。これは機能しますが、リソースのひどい浪費のようです。どなたにより良い提案がありますか?

+0

OPは自分のプログラムで1つだけを使用するのではなく、コントロールを作成しています。 –

答えて

3

イベントは発生しません。どちらも生成できません。ネイティブコントロールはイベントをサポートしていません。これは、ユーザーだけでなくコードだけがノードを追加できるためです。 TreeNodeCollectionクラスに侵入できないため、生成できません。簡単な回避策は、静的なCreateNode()ファクトリメソッドをクライアントコードが適切に初期化されたノードを作成するために使用することを期待してクラスに追加することです。

DrawModeプロパティを考慮して、必要な方法でノードを描画できるようにする必要があります。クリックを検出するHitTest()、ボックスを描画するControlPaint.DrawCheckBox()

+0

素晴らしい! Drawreen = OwnerDrawnTextを使用していますので、私はStateImageIndex = -1の場合にチェックインできます。ありがとうございました! –

関連する問題