单击图像时出现C#TreeView.GetNodeAt()问题

时间:2009-03-24 17:20:16

标签: c# winforms treeview click treenode

当在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()方法没有问题。为什么有人会这样做仍然是一个谜。 :)

3 个答案:

答案 0 :(得分:4)

您是否尝试过BeforeSelect或AfterSelect事件?您可以直接从TreeViewCancelEventArgs获取所选节点,然后在Click事件中使用它。

编辑:额外的想法:我能看到的唯一问题是,在 Click和MouseClick事件之后,BeforeSelect事件实际上会触发

另一个编辑:如果你需要一个在Click之前触发的事件,你可以使用NodeMouseClick - TreeNodeMouseClickEventArgs有一个Node属性。

答案 1 :(得分:2)

为什么不使用TreeView.SelectedNode

答案 2 :(得分:0)

尝试:

TreeNode node = this.SelectedNode;
编辑:肖恩打败了拳头