【问题标题】:Change happens after 2 mouse clicks when it should happen after a single click更改发生在单击 2 次鼠标后,而应该发生在单击一次后
【发布时间】:2023-03-09 16:55:01
【问题描述】:

我有一个 c# 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();
        }

【问题讨论】:

  • 这是鼠标捕获的副作用,Control.Capture 属性。从描述中完全不清楚这是如何发生的。发布一个sn-p。

标签: c# winforms treeview mouseevent selection


【解决方案1】:

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

【讨论】:

  • 将 Treeview HideSelection 属性设置为 False 无效
【解决方案2】:

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

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

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

附:有时事情并没有像您期望的那样工作,您只需努力并经历所有其他可能性,直到找到解决方案。

【讨论】:

    【解决方案3】:

    禁用隐藏选择选项并使用 afterSelect 选项 在我的项目中运行良好

    【讨论】:

      猜你喜欢
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      相关资源
      最近更新 更多