2012-04-19 19 views
0

私は、メインフォームの一部であるtabControlのtabPage内にtreeViewがあるC#windowsフォームアプリケーションを持っています。クリック1回後に2回クリックした後に変更が発生する

ツリービューの場合は、選択したいツリービューの項目をクリックして、選択したアイテムに基づいて変更が行われます。

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

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

どうしたらいいですか?それを解決する方法は?ありがとう。

編集:私は、ツリービューの私自身のマルチセレクションのバージョンを使用していると私は私が最初にクリックした後、AfterSelectイベントでツリーの選択されたノードを取得するときには、それを、ゼロであること(デバッグを使用して)い 2回目のクリックで選択されたノードの数です。ツリービューのオーバーライドされたOnAfterSelectイベントの中で、選択されたノードが追加され、現在選択されているノードリストにクリックされるたびに、どのようになっていますか?ここ

は、ツリービューのコードの一部です:

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(); 
     } 
+1

これはマウスキャプチャの副作用であり、Control.Captureプロパティです。それがどのように起こったかは、その記述から完全には不明である。スニペットを投稿してください。 –

+0

私の投稿を更新しました – mj1261829

答えて

0

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

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

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

P.S.時には、あなたが期待しているように物事がうまくいかず、あなたが解決策を見つけるまで戦い、あらゆる可能性を追い求めるだけです。

0

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

+0

Treeview HideSelectionプロパティをFalseに設定しても機能しませんでした – mj1261829