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

Joa*_*nge 1 .net c# treeview winforms

基本上,TreeView具有复选框,并且我能够获取TreeNode,但是无论我单击TreeNode的位置如何,它都会为我提供TreeNode,从文本到复选框,再到复选框的左边(左侧)。

我可以限制点击率,以便仅当用户单击TreeNode的复选框时才得到TreeNode吗?

Jen*_*und 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;
        }
Run Code Online (Sandbox Code Playgroud)