鼠标停机时如何在鼠标光标下获取TreeNode?

时间:2009-12-08 23:35:32

标签: c# .net winforms treeview

基本上TreeView有复选框,我可以获得TreeNode,但它给我TreeNode,无论我点击TreeNode,从它的文本到它的复选框,稍微超出它(向左)。

我可以限制hittest,因此如果用户点击TreeNode的复选框,我只会获得一个TreeNode吗?

1 个答案:

答案 0 :(得分:5)

我真的不知道你想做什么,但你可以使用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;
        }