Winform使用TreeView控件实现带复选框的三态树

刚接触c#,项目中用到Treeview实现三态,即选中、未选中、半选中状态,并且要求父子节点选择联动,效果类似下图

网上有很多例子,于是研究了一下,结合网上大佬们的例子,所以在这里记录一下。

首先新建一个Winform工程拖个TreeView控件,然后运行。。。

嗯。。。加点数据吧。

private void CreateTree()
{
    TreeNode anime = new TreeNode("2018一月新番");
            
    var china = anime.Nodes.Add("国创");
    pointer = china.Nodes.Add("一人之下");
            
    pointer = china.Nodes.Add("狐妖小红娘");
    pointer = china.Nodes.Add("妖神记");
    pointer = china.Nodes.Add("斗罗大陆");

    var nihonn = anime.Nodes.Add("日本");
    pointer = nihonn.Nodes.Add("OVERLORD");
    pointer = nihonn.Nodes.Add("龙王的工作");
    pointer = nihonn.Nodes.Add("紫罗兰永恒花园");
    pointer = nihonn.Nodes.Add("魔卡少女樱");
    pointer = nihonn.Nodes.Add("博多豚骨拉面团");

    this.LaoYeZha_TreeView.Nodes.Add(anime);
}

运行。。

ok,然后考虑节点选择联动,先考虑选中一个节点,子节点全选中,取消选择,子节点全都不选中。

添加treeview的AfterCheck事件。

private void LaoYeZha_TreeView_AfterCheck(object sender, TreeViewEventArgs e)
{
    //只处理鼠标点击引起的状态变化
    if(e.Action == TreeViewAction.ByMouse)
    {
        //更新子节点状态
        UpdateChildNodes(e.Node);
    }
}

private void UpdateChildNodes(TreeNode node)
{
    foreach (TreeNode child in node.Nodes)
    {
        child.Checked = node.Checked;
        UpdateChildNodes(child);
    }
}

现在实现了子节点联动了,接下来是父节点

在AfterCheck事件中添加方法

private void LaoYeZha_TreeView_AfterCheck(object sender, TreeViewEventArgs e)
{
    //只处理鼠标点击引起的状态变化
    if(e.Action == TreeViewAction.ByMouse)
    {
        //更新子节点状态
        UpdateChildNodes(e.Node);
        //更新父节点状态
        UpdateParents(e.Node);
    }
}
private void UpdateParents(TreeNode node)
{
    var parent = node.Parent;
    while (parent != null)
    {
        //设置父节点状态
        SetNode
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值