0

我有 ac# windows 窗体应用程序,其中我在 tabControl 的 tabPage 中有一个 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();
        }
4

3 回答 3

0

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

于 2012-04-19T21:59:04.310 回答
0

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

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

我发布了这篇文章,希望它对像我一样遇到同样问题的其他人有所帮助。

PS 有时事情并没有像你期望的那样工作,你只是努力奋斗并经历所有其他可能性,直到找到解决方案。

于 2012-04-21T06:21:51.187 回答
0

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

于 2020-11-25T20:38:54.043 回答