【发布时间】: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