我有一个TreeView控件。假设我有5个节点。在选择节点时,我使用SelectedNode下的所有目录填充ListView。然后,我单击一个Button,它修改ListView项。
因此,当我再次在TreeView中选择Node(我之前选择的那个)时,AfterSelect事件不会触发。因此,我的ListView没有得到更新。
任何想法的家伙/加尔斯?
答案 0 :(得分:2)
解决方法是切换选定的节点...
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;
}
};
答案 1 :(得分:0)
它没有被触发,因为该项目已被选中。请改为处理MouseDown
或PreviewMouseDown
。
答案 2 :(得分:0)
这是不可能的。 AfterSelect
事件不会再次引发,因为所选的节点已经已经选中。 选择不会更改,因此不会引发该事件。
如果在重新选择节点时绝对必须触发某些操作,则需要在低于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
// . . .
}
}
答案 3 :(得分:0)
您可以使用鼠标点击事件而不是选择事件后
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
答案 4 :(得分:0)
@Cody Gray即使这是一个非常多的帖子,就像发布和回答一样。 我认为,如果在选择节点的同时折叠并展开树视图,它将起作用。代码如下
MyTreeview.CollapseAll()
MyTreeview.ExpandAll()