点击2次后发生变化,单次点击后就会发生变化

时间:2012-04-19 21:48:32

标签: c# winforms treeview mouseevent selection

我有一个c#windows窗体应用程序,我在tabControl的tabPage里面有一个treeView,它是主窗体的一部分。

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

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

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

怎么会发生这种情况?以及如何解决?谢谢。

编辑:我正在使用我自己的多选版本的treeView,我发现(使用调试)当我在第一次点击后获得AfterSelect事件中树的选定节点时零,然后是第二次单击所选节点的数量。为什么在添加选定节点时会发生这种情况,并且在树视图的覆盖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();
        }

3 个答案:

答案 0 :(得分:0)

也许Treeview在点击之间失去焦点(?)。您可以尝试将Treeview HideSelection属性设置为False,以便在控件失去焦点时突出显示当前选定的项目。

答案 1 :(得分:0)

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

好吧,我最终覆盖了我的treeView子类中的MouseUp和MouseUp事件,然后我创建了一个侦听selectedNodes列表中的更改的事件。如果在任何鼠标事件中对selectedNodes的更改都很高兴,则会触发此事件。然后,我在我的应用程序中使用了treeview实例的ChangedSelectedNodes事件处理程序,以便在节点选择发生更改时执行其他更改。这次它按预期工作。

我发布了这篇文章,希望对遇到像我这样的问题的其他人都有好处。

P.S。有时候事情并不像你期望的那样有效,而你只是在进行斗争并经历其他所有可能性,直到找到解决方案。

答案 2 :(得分:0)

禁用隐藏选择选项,并使用afterSelect选项 在我的项目中效果很好