触发TreeView AfterSelect事件多次
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了触发TreeView AfterSelect事件多次相关的知识,希望对你有一定的参考价值。
我有一个TreeView控件。假设我有5个节点。在选择节点时,我使用SelectedNode下的所有目录填充ListView。然后,我单击一个Button,它修改ListView项。
因此,当我再次在TreeView中选择节点(我之前选择的节点)时,AfterSelect事件不会触发。因此,我的ListView没有得到更新。
任何想法家伙/女孩?
这是不可能的。 AfterSelect
事件不会再次引发,因为已选择的节点已被选中。选择不会改变,因此不会引发事件。
正如汉斯在对原始问题的评论中所指出的那样,用户很难意识到用户会意识到再次点击已经选中的节点会产生某种影响。更好的解决方案是为您的应用程序添加“刷新”功能。这通常映射到F5键和/或Ctrl + R键盘快捷键。
如果在重新选择节点时绝对必须触发某些操作,则需要在低于AfterSelect
事件的级别处理它。这意味着要确定用户手动点击的节点。为此,请处理MouseDown
event,并使用HitTest
method确定用户单击位置的节点。它不漂亮,我也不推荐它,但它会完成工作。
private void myTreeView_MouseDown(object sender, MouseEventArgs e)
{
TreeViewHitTestInfo info = myTreeView.HitTest(e.X, e.Y);
// Ensure that the user actually clicked on a node (there are lots of areas
// over which they could potentially click that do not contain a node)
if ((info.Node != null) && (info.Node == myTreeView.SelectedNode))
{
// The user clicked on the currently-selected node,
// so refresh the TreeView
// . . .
}
}
解决方法是切换选定的节点......
treeView.NodeMouseClick += delegate(object sender, TreeNodeMouseClickEventArgs e) {
TreeNode selected = e.Node;
// If node already selected - unselect, then reselect
if (selected == treeView.SelectedNode) {
treeView.SelectedNode = null;
treeView.SelectedNode = selected;
}
};
它没有被触发,因为该项目已被选中。改为处理MouseDown
或PreviewMouseDown
。
您可以使用鼠标单击事件而不是选择事件后
Sub treeView1_NodeMouseClick(ByVal sender As Object,ByVal e As TreeNodeMouseClickEventArgs)处理TreeView1.NodeMouseClick
' textBox1.Text = e.Node.Text
If Not e.Node.Tag Is Nothing Then
Dim frm As Form = DirectCast(e.Node.Tag, Form)
frm.ShowDialog()
''frm.Dispose()
End If
End Sub
@Cody Gray即使这是一个非常全的帖子,就像发帖和回答一样。我认为,如果您在选择节点的同时折叠和展开树视图,它将起作用。代码如下
MyTreeview.CollapseAll()
MyTreeview.ExpandAll()
以上是关于触发TreeView AfterSelect事件多次的主要内容,如果未能解决你的问题,请参考以下文章
C# Winform如何实现单击treeview子节点“设置员工信息” 打开窗体Form1