C# winform TreeView中關於checkbox選擇的完美類[轉]


http://www.cnblogs.com/kingangWang/archive/2011/08/15/2139119.html

 

public static class TreeViewCheck
{
    /// <summary>
    /// 系列節點 Checked 屬性控制
    /// </summary>
    /// <param name="e"></param>
    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)

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM