私は真剣に迷惑な問題を抱えていますが、解決しようとするとばかげた時間を費やしていました。BeforeExpandがツリービューで複数回トリガーされました
私はいつもサードパーティ製のコンポーネントを使用していましたが、これまでに悪い経験を話していたように、.NETに付属する標準のツリービューを使ったことはありませんでした。要するに
、私は私のドライブをロードしていないんだし、ドライブを展開するときに、私は、フォルダを一覧表示する、というように...ここで新しい何が、私は2つの主要な問題抱えている:
をすべてのブランチが折りたたまれると、beforeとafterの2回の展開イベントがトリガされます。BeforeExpand x 2、AfterExpand x 2。
複数のブランチが展開されると、展開された各ブランチに対してイベント2がトリガーされます。それは私がそうでないときに私は再帰的コードのいくつかの並べ替えを呼び出すようだ...だから、例えば
Cを展開 - > BeforeExpand X 2、次いでAfterEvent X 2トリガ - > EためBeforeExpand X 2をトリガし、その後、X 2 AfterEventは、次いで、Cのために再びそれをしない - - ままEを展開
を拡大し、それを残しますEは拡大した。
Fを展開 - > FのためBeforeExpand×2をトリガし、その後、AfterEvent×2、そしてC.
は、それは意味がありません。そして、Eのために再びそれをしません!賢い
コード:
は私がノードを展開すると、バックグラウンドスレッドが呼び出されると、ドライブやフォルダをロードするのいずれかされBeforeExpandとAfterExpand私のフォームは、すなわち初期化
treeView1.BeforeExpand += new TreeViewCancelEventHandler(treeView1_BeforeExpand); treeView1.AfterExpand += new TreeViewEventHandler(treeView1_AfterExpand);
を初期化します。バックグラウンドワーカースレッドから、私はそうもう一度デリゲートを呼び出すことにより、クロススレッドの問題を処理する関数、私は実際にそれができると、このバーを引き起こしているものへとアイデアの出だ
何も特別なを呼び出しますMS側のバグかもしれないが、私はそれを疑う...それはあまりにも明白な問題のように感じる。
これはちょうど私が始めたダミーのテストアプリだったので、必要ならば私のコードを投稿して嬉しいです。私は間違ったことをしたかもしれませんが、何が見えないのか分かりません。
誰かがこれを引き起こしていることについてのヒントを期待しています。
ありがとうございました。
Thierry。