C# 更改发生在鼠标单击两次之后,而更改应该发生在单击一次之后
我有一个c windows窗体应用程序,其中tabControl的tabPage中有一个treeView,它是主窗体的一部分 对于树状视图,我单击要选择的树状视图的项目,然后根据我选择的项目进行一些更改 我使用AfterSelect事件选择项目,使用mouseUp事件取消选择 项目选择和取消选择立即发生,只需单击一次没有问题。其他更改应基于所选项目在单击两次后进行!在项目节点上或节点区域外单击不会触发此更改。我必须再次单击才能看到更改。那是有线的。我没有使用鼠标双击事件来进行此操作或类似操作,我只是使用上面描述的事件 这怎么会发生?如何解决呢?谢谢 编辑:我正在使用我自己的树视图的多选版本,并且我使用调试发现,当我在第一次单击后在AfterSelect事件中获得树的选定节点为零时,则是第二次单击的选定节点数。为什么每次单击树视图的overrided OnAfterSelect事件时,都会将所选节点添加到当前的selectedNodes列表中时会发生这种情况 以下是树视图代码的一部分:C# 更改发生在鼠标单击两次之后,而更改应该发生在单击一次之后,c#,winforms,treeview,mouseevent,selection,C#,Winforms,Treeview,Mouseevent,Selection,我有一个c windows窗体应用程序,其中tabControl的tabPage中有一个treeView,它是主窗体的一部分 对于树状视图,我单击要选择的树状视图的项目,然后根据我选择的项目进行一些更改 我使用AfterSelect事件选择项目,使用mouseUp事件取消选择 项目选择和取消选择立即发生,只需单击一次没有问题。其他更改应基于所选项目在单击两次后进行!在项目节点上或节点区域外单击不会触发此更改。我必须再次单击才能看到更改。那是有线的。我没有使用鼠标双击事件来进行此操作或类似操作,我
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();
}
也许Treeview在点击之间失去了焦点。您可以尝试将Treeview HideSelection属性设置为False,以便在控件失去焦点时突出显示当前选定的项目。我尝试使用MouseDown事件而不是AfterSelect事件。我在我自己的treeView的多选版本中覆盖了它,并在我正在开发的c应用程序中使用了它,但它仍然不起作用。我不确定鼠标事件到底是如何工作的。如果不小心使用,您可能会看到有线行为 我最终覆盖了我的treeView子类中的MouseUp和MouseUp事件,然后创建了一个事件来侦听selectedNodes列表中的更改。如果在任何鼠标事件中对所选节点进行更改,则会触发此事件。然后,我在应用程序中使用treeview实例的ChangedSelectedNodes事件处理程序在节点选择发生更改时进行其他更改。这一次,一切如期进行 我发布这篇文章是希望它能对像我一样遇到同样问题的人有所帮助
附言:有时候事情并不像你期望的那样,你只是在努力和尝试其他的可能性,直到你找到解决方案 禁用隐藏选择选项并使用afterSelect选项
在我的工作良好的项目中这是鼠标捕获的副作用,Control.capture属性。从描述中完全不清楚这是怎么发生的。发布代码段。将Treeview HideSelection属性设置为False无效