8

ノードのリスト全体がアルファベット順にソートされるように、追加される新しいノードが正しいインデックスに挿入される WinForms .NET TreeView コントロールにノードを追加する簡単な方法はありますか? とほとんど同じ結果になりTreeView.Sort()ます。

数百ノードに継続的に成長する TreeView があります。ユーザーは、この TreeView の成長に合わせてリアルタイムで表示できます。ノードが追加されるたびに TreeView.Sort() を呼び出すのではなく、正しいインデックスにノードを挿入することをお勧めします。

これはできますか?

4

2 に答える 2

24

.Sortedwinforms では、TreeView のプロパティを に設定するだけですTrue

Sorted が true に設定されている場合、TreeNode オブジェクトは Text プロパティ値のアルファベット順に並べ替えられます。並べ替えられた TreeView に大量の項目を追加するときは、常に BeginUpdate と EndUpdate を使用してパフォーマンスを維持する必要があります。既存のノードのテキストが変更された場合、Sort を呼び出して項目を並べ替える必要があります。

MSDN を参照

于 2008-12-24T05:46:01.603 に答える
5

TreeViewとを継承する新しいクラスを作成してみませんTreeNodeCollectionか? newTreeViewはあなたの new を使用し、のメソッドをTreeNodeCollectionオーバーライドして、提案していることを実行できます。Add()TreeNodeCollection

1. 挿入する正しい位置を見つけ、2. 新しいノードを挿入します。

最も簡単な実装は、 までコレクションを反復しthisNode.value<=newNode.value<nextNode.valueます。次に の前に挿入しnextNode.Indexます。コレクションのサイズによっては、別の検索アルゴリズムを使用すると、パフォーマンスが向上することがあります。(二分探索のようなものが頭に浮かびます。)

注: 同じことを行う拡張メソッドを で作成することもできますTreeNodeCollection。ただし、Add()メソッドをオーバーライドするTreeViewと、常にソートされます。拡張メソッドのみを作成すると、呼び出し前にまだソートされていない場合、未定義の結果が生じる可能性がありますAddIntoSorted()

于 2008-12-24T05:34:37.070 に答える