您的位置:首页 > 编程语言 > C#

C# winform TreeView中关于checkbox选择的完美类(转载)

2008-12-29 09:01 435 查看
public static class TreeViewCheck
{
///
/// 系列节点 Checked 属性控制
///
///
public static void CheckControl(TreeViewEventArgs e)
{
if (e.Action != TreeViewAction.Unknown)
{
if (e.Node != null && !Convert.IsDBNull(e.Node))
{
CheckParentNode(e.Node);
if (e.Node.Nodes.Count > 0)
{
CheckAllChildNodes(e.Node, e.Node.Checked);
}
}
}
}

#region 私有方法

//改变所有子节点的状态
private static void CheckAllChildNodes(TreeNode pn, bool IsChecked)
{
foreach (TreeNode tn in pn.Nodes)
{
tn.Checked = IsChecked;

if (tn.Nodes.Count > 0)
{
CheckAllChildNodes(tn, IsChecked);
}
}
}

//改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改
private static void CheckParentNode(TreeNode curNode)
{
bool bChecked = false;

if (curNode.Parent != null)
{
foreach (TreeNode node in curNode.Parent.Nodes)
{
if (node.Checked)
{
bChecked = true;
break;
}
}

if (bChecked)
{
curNode.Parent.Checked = true;
CheckParentNode(curNode.Parent);
}
else
{
curNode.Parent.Checked = false;
CheckParentNode(curNode.Parent);
}
}
}

#endregion
}


调用方法:在treeview的AfterCheck事件中

private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)

{

    TreeViewCheck.CheckControl(e)

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: