当在TreeView中单击节点时,我正在使用TreeView上的click事件来做一些事情。我这样做是通过使用鼠标坐标调用GetNodeAt()获取点击的节点,如下所示:
private void TreeView_Click(object sender, System.EventArgs e)
{
MouseEventArgs mouseEventArgs = e as MouseEventArgs;
if (mouseEventArgs == null)
return;
// Get the node that is being clicked.
TreeNode node = this.GetNodeAt(mouseEventArgs.X, mouseEventArgs.Y);
// Do other stuff...
}
但是,GetNodeAt()方法仅在点击位于节点标签上时才有效,当单击节点图像时GetNodeAt()返回null。这有点烦人,因为单击图像时实际选择了节点,但我找不到它是什么节点。
有人有任何建议吗?
更新: 我已经得到了一些使用SelectedNode的建议。我不能,因为它是在Click事件被触发后设置的。这实际上是在一个继承TreeView的控件中,它的作用是触发它自己的Clicked事件,但是使用TreeNode代表的底层数据而不是TreeNode本身。
更新:原来有人在我们的代码中重写了GetNodeAt()方法,这引入了这种行为,我没有意识到。所以问题是无效的,GetNodeAt()方法没有问题。为什么有人会这样做仍然是一个谜。 :)
答案 0 :(得分:4)
您是否尝试过BeforeSelect或AfterSelect事件?您可以直接从TreeViewCancelEventArgs获取所选节点,然后在Click事件中使用它。
编辑:额外的想法:我能看到的唯一问题是,在 Click和MouseClick事件之后,BeforeSelect事件实际上会触发 。
另一个编辑:如果你需要一个在Click之前触发的事件,你可以使用NodeMouseClick - TreeNodeMouseClickEventArgs有一个Node属性。
答案 1 :(得分:2)
为什么不使用TreeView.SelectedNode
?
答案 2 :(得分:0)
尝试:
TreeNode node = this.SelectedNode;
编辑:肖恩打败了拳头