基本上TreeView有复选框,我可以获得TreeNode,但它给我TreeNode,无论我点击TreeNode,从它的文本到它的复选框,稍微超出它(向左)。
我可以限制hittest,因此如果用户点击TreeNode的复选框,我只会获得一个TreeNode吗?
答案 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;
}