1

StateImageList を利用してツリーに「適切な」トライステート チェックを実装するツリービューがあります。ただし、問題は、ツリーに追加されるノードの最初のレイヤーです。デフォルトでは、新しい TreeNode の StateImageIndex は -1 であり、それらが追加されたことを実際に知る方法はありません。子ノードであるノードは、BeforeExpand でキャッチして StateImageIndex を適切に設定できますが、ノードのトップ レイヤーをどうすればよいかわかりません。

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

4

1 に答える 1

3

イベントはありません。生成することもできません。ノードを追加できるのはコードのみであり、ユーザーは追加できないため、ネイティブ コントロールはイベントをサポートしません。TreeNodeCollection クラスに割り込むことができないため、生成できません。簡単な回避策は、静的な CreateNode() ファクトリ メソッドをクラスに追加することです。これは、クライアント コードがそれを使用して適切に初期化されたノードを作成することを想定しています。

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

于 2012-04-20T01:11:03.410 に答える