2012-04-19 85 views
0

我有一个c#窗体窗体应用程序,其中我在tabControl的tabPage内有一个treeView,它是主窗体的一部分。单击鼠标2次鼠标单击后发生更改

对于树视图,我点击了我想要选择的treeView的项目,然后根据我选择的项目进行一些更改。

我正在使用AfterSelect事件进行项目选择,并使用mouseUp事件来撤消选择。

项目选择和取消选择立即发生,只需点击一下(没问题)。其他更改应该基于两次点击后发生的选定项目发生!只需在项目节点上或在节点区域外单击即可不触发此更改。我必须再次点击以查看更改。这是有线的。我没有使用鼠标双击事件或类似的东西,我只使用我上面描述的事件。

这怎么会发生?以及如何解决它?谢谢。

编辑:我使用我自己的多选版本的treeView,我发现(使用调试),当我第一次点击后得到AfterSelect事件中的树的选定节点为零,那么它是第二次点击所选节点的数量。在添加了选定节点时,如何在发生这种情况时发生这种情况,并在每次点击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(); 
     } 
+1

这是鼠标捕获,Control.Capture属性的副作用。描述中发生的事情完全不清楚。发布一个片段。 – 2012-04-19 22:27:29

+0

已更新我的帖子 – mj1261829 2012-04-19 23:00:13

回答

0

我试图使用MouseDown事件而不是AfterSelect事件。我在我自己的treeView的多选版本中覆盖它,并在我正在开发的c#应用程序中使用,但仍然无效。我不确定鼠标事件是如何工作的。如果不谨慎使用,您可能会看到有线行为。

那么,我最终覆盖了我的treeView子类中的MouseUp和MouseUp事件,然后我创建了一个事件,它监听selectedNodes列表中的更改。如果在任何鼠标事件中对selectedNodes的更改感到满意,则会触发此事件。然后,当我的应用程序中的Treeview实例的ChangedSelectedNodes事件处理程序在节点选择发生变化时执行其他更改。这次它按预期工作。

我发布了这个文件,希望对遇到像我这样的问题的任何人都有好处。

P.S.有时候事情并不会像你期望的那样发挥作用,而你只是在争取和经历其他各种可能性之后才找到解决方案。

0

也许树视图失去焦点在点击之间。您可以尝试将Treeview HideSelection属性设置为False,以在控件失去焦点时保持当前选定的项目高亮显示。

+0

将Treeview HideSelection属性设置为False不起作用 – mj1261829 2012-04-19 22:31:13