这段时间正在研究这个控件,摸出了一些东西,给大家看看。
1:点击空白处的问题。
处理鼠标Up事件
private void Tree_MouseUp(object sender, MouseEventArgs e)
{
Point p = new Point(e.X, e.Y);
TreeNode selectNode = AuthTree.GetNodeAt(p);
bool isBlank = false;
if (selectNode == null)
isBlank = true;
else
{
if(selectNode.Bounds.Contains(e.X,e.Y) == false)
isBlank = true;
}
if (isBlank)
{
//处理选择空白
}
}
主要是根据鼠标坐标和节点的两个方法:根据坐标得到节点(GetNodeAt)和节点区域(Bounds)来处理。
2:复选框选择问题
我的想法是选中某个节点时将其所有子节点全部选中,当某节点有子节点选中时则选中这个节点,否则不选择这个
节点。
因为AfterCheck事件是递归触发的,所以处理不当就会进入死循环,我是进入死递归把程序堆栈塞满了。
最后我增加了一个变量保证了连续出发的方向,