我有一个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();
}
答案 0 :(得分:0)
也许Treeview在点击之间失去焦点(?)。您可以尝试将Treeview HideSelection属性设置为False,以便在控件失去焦点时突出显示当前选定的项目。
答案 1 :(得分:0)
我尝试使用MouseDown事件而不是AfterSelect事件。我在我自己的treeView多选版本中覆盖它,并在我正在开发的c#应用程序中使用但仍然无法正常工作。我不确定鼠标事件是如何工作的。如果不小心使用,您可能会看到有线行为。
好吧,我最终覆盖了我的treeView子类中的MouseUp和MouseUp事件,然后我创建了一个侦听selectedNodes列表中的更改的事件。如果在任何鼠标事件中对selectedNodes的更改都很高兴,则会触发此事件。然后,我在我的应用程序中使用了treeview实例的ChangedSelectedNodes事件处理程序,以便在节点选择发生更改时执行其他更改。这次它按预期工作。
我发布了这篇文章,希望对遇到像我这样的问题的其他人都有好处。
P.S。有时候事情并不像你期望的那样有效,而你只是在进行斗争并经历其他所有可能性,直到找到解决方案。
答案 2 :(得分:0)
禁用隐藏选择选项,并使用afterSelect选项 在我的项目中效果很好