0

メインフォームの一部であるtabControlのtabPage内にtreeViewがあるac#Windowsフォームアプリケーションがあります。

ツリー ビューの場合、選択したい treeView のアイテムをクリックすると、選択したアイテムに基づいて変更が発生します。

アイテムの選択には AfterSelect イベントを使用し、選択を元に戻すには mouseUp イベントを使用しています。

アイテムの選択と選択解除は、1 回のクリックですぐに行われます (問題ありません)。選択したアイテムに基づいて発生する必要がある他の変更は、2 回のクリック後に発生します。項目ノードまたはノードの領域外のいずれかを 1 回クリックしても、この変更はトリガーされません。変更を確認するには、もう一度クリックする必要があります。それは有線です。私はマウスのダブル クリック イベントをこれまたは類似のものに使用していません。上で説明したイベントのみを使用しています。

これはどのように起こりますか?およびそれを解決する方法は? ありがとう。

編集:私はtreeViewの独自の複数選択バージョンを使用しており、(デバッグを使用して)最初のクリック後にAfterSelectイベントでツリーの選択されたノードを取得すると、それは選択されたノードの数であることがわかりました2回目のクリックで。treeView のオーバーライドされた OnAfterSelect イベントでクリックするたびに、選択したノードが追加され、現在の selectedNodes リストに追加されると、なぜこれが起こるのでしょうか?

ツリー ビュー コードの一部を次に示します。

public List<TreeNode> SelectedNodes
        {
            get
            {
                return selectedNodes; 
            }

            set
            {
                removeSelectionFromNodes();
                selectedNodes = value;
                selectNodes();
            }
        }

   protected override void OnAfterSelect(TreeViewEventArgs e)
        {
            base.OnAfterSelect(e); 
            base.SelectedNode = null;
           List<MSTreeNode> nodes = new List<MSTreeNode>();
                   .
                   .
                   .
               removeSelectionFromNodes();
                selectedNodes.Clear();
                selectedNodes.AddRange(nodes);
                selectNodes();
        }
4

3 に答える 3

0

AfterSelect イベントの代わりに MouseDown イベントを使用しようとしました。私はtreeViewの独自の複数選択バージョンでそれをオーバーライドし、開発中のc#アプリケーションで使用しましたが、それでも機能しませんでした。マウスイベントが実際にどのように機能するかはわかりません。注意して使用しないと、有線の動作が見られる場合があります。

結局、treeView サブクラスで MouseUp および MouseUp イベントをオーバーライドしてから、selectedNodes リストの変更をリッスンするイベントを作成しました。いずれかのマウス イベントで selectedNodes への変更が発生すると、このイベントがトリガーされます。次に、アプリケーションでツリービュー インスタンスの ChangedSelectedNodes イベント ハンドラーを使用して、ノードの選択に変更があったときに他の変更を行いました。今回は期待通りに動作しました。

私のような同じ問題に遭遇した他の誰かにとって有益であることを期待して、これを投稿しました。

PS 時々、物事が期待どおりに機能せず、解決策が見つかるまで他のすべての可能性を試してみる必要があります。

于 2012-04-21T06:21:51.187 に答える
0

たぶん、ツリービューはクリックの間にフォーカスを失っています (?)。Treeview HideSelection プロパティを False に設定して、コントロールがフォーカスを失ったときに現在選択されている項目を強調表示したままにすることができます。

于 2012-04-19T21:59:04.310 に答える