获取光标下的树节点

本文关键字:树节点 光标 获取 | 更新日期: 2023-09-27 18:24:29

基本上,我有一个填充了大量图像文件的树视图。我正试图让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错误,或者两者兼而有之。

获取光标下的树节点

该事件的参数TreeNodeMouseHoverEventArgs-已经具有所需的信息。

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

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

问题在于中使用的参数

TreeBrowser.GetNodeAt(Cursor.Position.X, Cursor.Position.Y)

尝试更改为

treeView1.PointToClient(Cursor.Position)

或者使用TreeNodeMouseHoverEventArgs的参数

this.treeView1.GetNodeAt(e.X, e.Y);