1

から派生したコントロールがTreeViewあります。これは、いくつかの階層データを反映し、レイジーな方法でノードを作成します。
特定のノードが展開されているとき、そのNodesコレクションにダミー ノードがあるかどうかを確認し、存在する場合はそれを削除し、データ ソースからデータをロードして実際の子ノードを作成します。

ノードのデータ読み込みは、次の構造で囲まれています。

Cursor = Cursors.WaitCursor;
BeginUpdate();
try
{
  // node.Nodes.Add(...)
}
finally
{
  EndUpdate();
  Cursor = Cursors.Default;
}

これは、次の 1 つのケースを除いて正常に機能します。ユーザーがノード上で (アスタリスク) を押す*と、多くのネストされたノードがロードされます。上記のコードにより、ツリー ビューが点滅し、スクロールバーが実行されます。

すべての子ノードが展開されると、ノードの展開が終了すると思いましたが、ExpandAllこれは誤りです。*

を押し*た場合に拡張エンディングを検出する方法はありTreeViewますか?

4

2 に答える 2

0

一番上のノードで * キーが押されたことを検出できず、すべての子ノードをループする再帰関数を記述し、これらの子ノードにさらに子ノードがある場合は、同じ関数を再度呼び出して、すべてのノードまで繰り返すことができますか?一番上のノードの下が展開されています。これにより、キー * が押された (および検出された) ときに展開されているすべてのノードが展開され、引き続き遅延読み込みが処理されます。

于 2013-03-27T13:12:29.063 に答える
0

BeforeExpand イベントで、selectedNode の現在のレベルを確認できます。ゼロの場合は最上位ノードです。イベントでは、新しい子ノードを作成し、それらに他のノードが含まれているかどうかを調べます。含まれている場合は、内部にダミー ノードを追加します。あなたのコードはおそらく現在持っているものとほとんど同じですが、レベル 1 ではなくレベル 0 です。

于 2013-03-28T01:34:29.490 に答える