代码之家  ›  专栏  ›  技术社区  ›  Joan Venge

鼠标向下时,如何在鼠标光标下获取TreeNode?

  •  1
  • Joan Venge  · 技术社区  · 15 年前

    基本上TreeView有复选框,我可以得到TreeNode,但是它给了我TreeNode,无论我在哪里点击TreeNode,从它的文本到它的复选框,还有一点超出(左边)。

    我可以限制HitTest吗?这样我只有在用户单击TreeNode的复选框时才能获得TreeNode?

    1 回复  |  直到 15 年前
        1
  •  4
  •   Jens Granlund    15 年前

    我真的不知道你想做什么,但是你可以在检查前或检查后使用TreeView事件。

    beforecheck将treeviewCancelEventArgs作为参数,treeviewCancelEventArgs具有cancel属性,如果不希望复选框更改状态,则可以使用该属性。

    编辑: 像这样的事情可能会奏效…

    
            private void treeView1_MouseDown(object sender, MouseEventArgs e)
            {
                _lastNode = null;
                _mouseDown = true;
            }
    
            private void treeView1_MouseMove(object sender, MouseEventArgs e)
            {
                if (_mouseDown)
                {
                    var hitTestInfo = treeView1.HitTest(e.Location);
                    if (hitTestInfo.Location == TreeViewHitTestLocations.StateImage 
                       && hitTestInfo.Node != _lastNode)
                    {
                        _lastNode = hitTestInfo.Node;
                        hitTestInfo.Node.Checked = !hitTestInfo.Node.Checked;
                    }
                    else
                    {
                        _lastNode = null;
                    }
                }
            }
    
            private void treeView1_MouseUp(object sender, MouseEventArgs e)
            {
                _lastNode = null;
                _mouseDown = false;
            }
    
    推荐文章