c# - 如何在鼠标按下时获取鼠标光标下的 TreeNode?

标签 c# .net winforms treeview

基本上 TreeView 有复选框,我能够获得 TreeNode,但无论我在 TreeNode 上单击什么地方,它都会为我提供 TreeNode,从它的文本到它的复选框,再超出一点(向左)。

我能否限制 HitTest ,以便仅在用户单击 TreeNode 的复选框时获得 TreeNode?

最佳答案

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

关于c# - 如何在鼠标按下时获取鼠标光标下的 TreeNode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1870644/

相关文章:

c# - List<T> 的 XML 序列化 - XML 根

.net - 如何创建包含集合集合的配置节?

c# - 记录所有在 Windows 中关闭的 Windows

c# - NullReferenceException:用户单击按钮时为 "Object reference not set to an instance of an object"

c# - 在 Windows 7 中更改屏幕保护程序设置时应用程序卡住 - System.Threading.Timer 是罪魁祸首?

c# - 如何在没有边框的情况下移动和调整窗体大小?

c# - 如何使用 internal 关键字隐藏类?

c# - 如何知道 File.Copy 成功了?

c# - 对象是类,因为枚举是...?

.net - VB.Net 'Sub Main' 未找到