0

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

4

2 回答 2

4

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

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

private void TreeBroswer_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e)
{
    var preview = new PictureBox { ImageLocation = e.Node.FullPath };
    // Display preview
}
于 2013-07-24T01:13:13.937 回答
2

问题在于您在

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

尝试更改为

treeView1.PointToClient(Cursor.Position)

或者使用TreeNodeMouseHoverEventArgs的参数

this.treeView1.GetNodeAt(e.X, e.Y);
于 2013-07-24T01:11:18.367 回答