【问题标题】:get treenode under cursor获取光标下的树节点
【发布时间】:2013-07-24 09:18:27
【问题描述】:

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

【问题讨论】:

    标签: c# winforms treeview


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      问题在于您在

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

      尝试更改为

      treeView1.PointToClient(Cursor.Position)
      

      或者使用TreeNodeMouseHoverEventArgs的参数

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

      【讨论】:

      • 我能够使用以下方法让它工作:TreeNode test = TreeBroswer.GetNodeAt(TreeBroswer.PointToClient(Cursor.Position));
      • @Crispy 所说的很重要。您需要进行 PointToClient 转换,但没有一个答案提到这一点。
      • 过了一会儿,但我的回答 treeView1 = treeBrowser,并提到了 PointToClient 转换。
      猜你喜欢
      • 2015-01-13
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多