【发布时间】:2009-12-08 23:35:32
【问题描述】:
基本上,TreeView 有复选框,我可以获取 TreeNode,但无论我点击 TreeNode,它都会给我 TreeNode,从它的文本到它的复选框,再到它的复选框(左侧)。
如果用户点击 TreeNode 的复选框,我可以限制 hittest 以仅获得 TreeNode 吗?
【问题讨论】:
基本上,TreeView 有复选框,我可以获取 TreeNode,但无论我点击 TreeNode,它都会给我 TreeNode,从它的文本到它的复选框,再到它的复选框(左侧)。
如果用户点击 TreeNode 的复选框,我可以限制 hittest 以仅获得 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;
}
【讨论】: