zoukankan      html  css  js  c++  java
  • 对树进行操作的工具

    //******************************************************************************
    //
    // 文 件 名: TreeUtil.cs
    //
    // 描 述: 对树进行操作的工具
    //
    // 作 者: 陈飞
    //
    // 地 点: 恒亿电子
    //
    // 创建时间: 2012-04-01
    //******************************************************************************

    using System.Windows.Forms;

    namespace AlarmClient.Common
    {
    /// <summary>
    /// 对树进行操作的回调
    /// </summary>
    /// <param name="node">要操作的节点</param>
    /// <returns>如果确认已处理,返回 true,否则返回 false.</returns>
    public delegate bool TreeNodeCallback(TreeNode node);

    /// <summary>
    /// 对控件进行操作的回调
    /// </summary>
    /// <param name="control">要操作的控件</param>
    /// <returns>如果确认已处理,返回 true,否则返回 false.</returns>
    public delegate bool ControlCallback(Control control);

    /// <summary>
    /// 对树进行操作的工具
    /// </summary>
    public static class TreeUtil
    {
    /// <summary>
    /// 递归对节点进行操作,子节点优先.
    /// </summary>
    /// <param name="nodes">要操作的节点的顶层集合.</param>
    /// <param name="tnc">操作回调.</param>
    /// <returns>受影响节点的个数</returns>
    public static int EachChildFirst(this TreeNodeCollection nodes, TreeNodeCallback tnc)
    {
    if (tnc == null) return 0;
    if (nodes == null || nodes.Count < 1) return 0;

    int cnt = 0;
    foreach (TreeNode node in nodes)
    {
    cnt += EachChildFirst(node.Nodes, tnc);

    if (tnc(node)) ++cnt;
    }

    return cnt;
    }

    /// <summary>
    /// 递归对节点进行操作,父节点优先.
    /// </summary>
    /// <param name="nodes">要操作的节点的顶层集合.</param>
    /// <param name="tnc">操作回调.</param>
    /// <returns>受影响节点的个数</returns>
    public static int EachParentFirst(this TreeNodeCollection nodes, TreeNodeCallback tnc)
    {
    if (tnc == null) return 0;
    if (nodes == null || nodes.Count < 1) return 0;

    int cnt = 0;
    foreach (TreeNode node in nodes)
    {
    if (tnc(node)) ++cnt;

    cnt += EachParentFirst(node.Nodes, tnc);
    }

    return cnt;
    }

    /// <summary>
    /// 递归对控件进行操作,子控件优先.
    /// </summary>
    /// <param name="controls">要操作的控件的顶层集合.</param>
    /// <param name="cc">操作回调.</param>
    /// <returns>受影响控件的个数</returns>
    public static int EachChildFirst(this Control.ControlCollection controls, ControlCallback cc)
    {
    if (cc == null) return 0;
    if (controls == null || controls.Count < 1) return 0;

    int cnt = 0;
    foreach (Control control in controls)
    {
    cnt += EachChildFirst(control.Controls, cc);

    if (cc(control)) ++cnt;
    }

    return cnt;
    }

    /// <summary>
    /// 递归对控件进行操作,父控件优先.
    /// </summary>
    /// <param name="controls">要操作的控件的顶层集合.</param>
    /// <param name="cc">操作回调.</param>
    /// <returns>受影响控件的个数</returns>
    public static int EachParentFirst(this Control.ControlCollection controls, ControlCallback cc)
    {
    if (cc == null) return 0;
    if (controls == null || controls.Count < 1) return 0;

    int cnt = 0;
    foreach (Control control in controls)
    {
    if (cc(control)) ++cnt;

    cnt += EachParentFirst(control.Controls, cc);
    }

    return cnt;
    }
    }
    }

  • 相关阅读:
    操作datetable 里面查出来的某个字段
    C# 字符串去重 还有 去除最后一位逗号。
    C# .net 调用ERP接口
    视图下拉列表接收控制器传来的值,并选中下拉类表中该值相对应的选项(新手笔记,请各位大神指教)
    MVC5控制器传值的三种方式(ViewData,ViewBag,TempData),刚刚学习MVC5的新手,希望各位大神多多指教
    c++模板之SFINAE
    c++头文件包含问题
    成员函数指针有多态的效果吗?
    emacs基本操作
    在c++中用function与bind实现委托
  • 原文地址:https://www.cnblogs.com/Robert-huge/p/5501295.html
Copyright © 2011-2022 走看看