2009-07-21 8 views
4

TreeViewの.Collapse()メソッドまたは.CollapseAll()メソッドの呼び出し以外に、TreeViewが崩壊する原因は何ですか?WinFormsでTreeViewが突然崩壊するのはなぜですか?

私が開発しているアプリケーションでは、TreeViewは正しく動作しません。 TreeViewは2つのレベルしか保持しません。親ノードの子を選択すると、他のすべてのノードが直ちに折りたたまれます。しかし、私のコードには何も.Collapse()または.CollapseAll()メソッド呼び出しはありません。

TreeViewのすべてのプロパティは、Trueに設定されている.LabelEditプロパティを除き、デフォルトでそのまま残ります。 TreeViewには、単純な検証/ MessageBoxルーチンのAfterLabelEditイベント内に関連付けられたコードがあります。

私が試してみました:

  • フッキングBeforeCollapseの TreeViewコントロールのイベントと e.CancelActionフラグを上げます。

  • ツリービューのAfterSelect イベント内のすべてのノード を手動で拡張します。 (これは 実験として正常に動作しますが、私は
    完全 不許可ノード崩壊するつもりはない!)のコード内の多くのポイントで

、私はに、ノードが、ツリービューを介してノードを反復処理していますプロパティを確認します。ただし、ノードの追加や削除は行われません。ユーザーが選択するときに変更される唯一のTreeNodeプロパティは、.ImageIndexと.SelectedImageIndexです。

上記の2つの解決策を除いて、私はこのエラーを引き起こしている可能性について何の手掛かりも持っていません。ソリューションが実現しない場合でも、誰かが崩壊を捕らえようとする適切な方法について考えているでしょうか? (IはBeforeCollapseイベント内のブレークポイントを設定しようとしているが、ユーザが明示的にマウスやキーボードを介してノードを崩壊しない限り、それがトリガされない。)


UPDATE:

問題がchagingによるものですTreeNode上の.SelectedImageIndexプロパティこのプロパティを変更すると、他のすべてのノードが折りたたまれます。

私は、.BeginUpdate()と.EndUpdate()呼び出しを使用して.SelectedImageIndexプロパティ修正コードを囲むことを試みました。

これをどのように回避できますか?

答えて

10

これは、ネイティブウィンドウがWindowsで動作する方法の副作用です。多くのウィンドウオプションは、CreateWindowEx()呼び出しでスタイルフラグによって指定されます。境界線がフォーム上にあるような基本的なもの。 ListViewにはどのような種類のビューが必要ですか。 TreeViewがチェックボックスを表示するかどうか。

これらのスタイルは、コントロールのプロパティとして公開されています。しかし問題があります。このようなプロパティを変更するには、新しいスタイルフラグをCreateWindowEx()呼び出しで指定できるように、ウィンドウを最初から再作成する必要があります。これには副作用があり、ウィンドウは完全に再作成され、以前の状態はすべて失われます。

Windowsフォームは、ウィンドウを再作成した後に以前の状態に戻すことで、この外観をスムーズにしてくれます。しかしそこにはそこに漏れがあります。そしていくつかの完全なバグ。 TreeViewの1つのリークは、どのノードが折りたたまれているか、どのノードが折りたたまれていないかの正確な状態です。これを追跡することは実用的ではありません。

これを監視するには、WatchViewのTreeViewのHandleプロパティをウォッチウィンドウに置きます。それが変わるのを見たら、あなたはその物件を見つけました。スタイルフラグのリストは利用可能ですhere,おそらく対応するプロパティに名前を割り当てることができます。

おそらく、このプロパティの変更を避ける以外に、この問題の大きな回避策はないことは明らかです。このような問題は、WPFが何であるかということです。

+0

総合的な回答ありがとうございます!ツリーの再作成を引き起こしていたプロパティを特定でき、初期化のポイントを過ぎて使用することはできませんでした。ツリーはもはやノードの状態を忘れることはありません。 – James

+0

@HansPassantなぜ私の編集をロールバックしたのか分かりますか?ありがとう –

関連する問題