【问题标题】:How to get the TreeNode under mouse cursor when the mouse is down?鼠标按下时如何获取鼠标光标下的TreeNode?
【发布时间】:2009-12-08 23:35:32
【问题描述】:

基本上,TreeView 有复选框,我可以获取 TreeNode,但无论我点击 TreeNode,它都会给我 TreeNode,从它的文本到它的复选框,再到它的复选框(左侧)。

如果用户点击 TreeNode 的复选框,我可以限制 hittest 以仅获得 TreeNode 吗?

【问题讨论】:

    标签: c# .net winforms treeview


    【解决方案1】:

    我真的不知道你想做什么,但你可以使用 TreeView 事件 BeforeCheck 或 AfterCheck。

    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;
            }
    

    【讨论】:

    • 这很难解释,但我正在寻找一种方法来检查/取消选中树节点,如果您单击并拖动树节点复选框。因此,如果您单击一个树节点并拖动多个复选框,当您按下鼠标左键时,它会在您越过它们时将它们全部切换。我得到了一切工作,除了一旦你开始拖动,拖动也可以超出复选框方块,并且仍然切换树节点。
    • TreeViewHitTestLocations.StateImage 是我想要的。
    猜你喜欢
    • 2010-09-27
    • 2011-02-28
    • 1970-01-01
    • 2011-01-05
    • 2021-01-05
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多