在光标下获取treenode

时间:2013-07-24 00:55:55

标签: c# winforms treeview

基本上我有一个填充了大量图像文件的树视图。我试图让NodeMouseHover事件带来一些图像的预览。要做到这一点,我需要找出鼠标结束的节点,但我无法使其工作,它无法在光标位置找到树节点。

这是我的代码

的简化版本
    private void TreeBroswer_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e)
    {
        string filePath;
        PictureBox preview;

        TreeNode test = TreeBroswer.GetNodeAt(Cursor.Position.X, Cursor.Position.Y);
        //Also tried MousePosition.X,MousePosition.Y

        if (test == null)
        {
            MessageBox.Show("No tree node");
        }
        else
        {
            filePath = test.FullPath;
            preview = new PictureBox();
            preview.ImageLocation = @filePath;
            // Display preview
        }
    }

无论我的鼠标在哪里,它都无法获得树节点。 我不确定我的鼠标位置是否错误,或者我是否使用了GetNodeAt错误,或两者都错。

2 个答案:

答案 0 :(得分:3)

该事件的参数 - TreeNodeMouseHoverEventArgs - 已经拥有您需要的信息。

只需引用e.Node即可查看鼠标当前悬停在哪个节点上。如果您没有悬停在某个节点上,则该事件不会触发,因此无需检查是否为null。

private void TreeBroswer_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e)
{
    var preview = new PictureBox { ImageLocation = e.Node.FullPath };
    // Display preview
}

答案 1 :(得分:0)

问题在于您在

中使用的参数
TreeBrowser.GetNodeAt(Cursor.Position.X, Cursor.Position.Y)

尝试更改为

treeView1.PointToClient(Cursor.Position)

或使用 TreeNodeMouseHoverEventArgs

的参数
this.treeView1.GetNodeAt(e.X, e.Y);