winform树形菜单无限级分类实例

 更新时间:2020年6月25日 11:43  点击:2633

以下实现的是一个树形菜单,每一级对应一类窗口,点击叶子节点时弹出新的窗口;

用递归和委托实现的。

第一部分功能-创建树形菜单

复制代码 代码如下:

/// <summary>
         /// 创建树形菜单
         /// </summary>
         public void AddTree(int ParentID, TreeNode pNode)
         {
             // 数据库名字字段
             string strName = "Name";
             // 数据库ID字段
             string strID = "ID";
             // 数据库父级ID字段
             string strParentID = "ParentID";
             DataTable dt = typeManager.GetAllList();
             DataView dvTree = new DataView(dt);
             dvTree.RowFilter = strParentID + " = " + ParentID;
             foreach (DataRowView Row in dvTree)
             {
                 TreeNode Node = new TreeNode();
                 if (pNode == null)
                 {
                     Node.Text = Row[strName].ToString();
                     Node.Name = Row[strName].ToString();
                     Node.Tag = Row[strID].ToString();
                     Node.ImageIndex = 1;
                     this.treeView1.Nodes.Add(Node);
                     AddTree(Int32.Parse(Row[strID].ToString()), Node); //再次递归
                 }
                 else
                 { 
                     Node.Text = Row[strName].ToString();
                     Node.Name = Row[strName].ToString();
                     Node.Tag = Row[strID].ToString();
                     Node.ImageIndex = 1;
                     pNode.Nodes.Add(Node);
                     AddTree(Int32.Parse(Row[strID].ToString()), Node); //再次递归
                 }
             }
         }

         /// <summary>
         /// 主窗体加载
         /// </summary>
         /// <param name="sender"></param>
         /// <param name="e"></param>
         private void frmTree_Load(object sender, EventArgs e)
         {
             // 根节点ID值
             int i = 0;
             this.treeView1.Nodes.Clear();
             AddTree(i, (TreeNode)null);
             treeView1.HideSelection = true;
             treeView1.ShowLines = true;
         }

第二部分功能-文件夹图标变换:

复制代码 代码如下:

private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
         {
             ImageChange(e);
         }

         private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
         {
             ImageChange(e);
         }
         /// <summary>
         /// 变换文件夹图标
         /// </summary>
         /// <param name="e"></param>
         public void ImageChange(TreeNodeMouseClickEventArgs e)
         {
             if (null == e.Node.FirstNode)
             {
                 e.Node.ImageIndex = 0;
                 e.Node.SelectedImageIndex = 0;
             }
             else
             {
                 if (e.Node.IsExpanded)
                 {
                     e.Node.ImageIndex = 0;
                     e.Node.SelectedImageIndex = 0;
                 }
                 else
                 {
                     e.Node.ImageIndex = 1;
                     e.Node.SelectedImageIndex = 1;
                 }
             }
         }

第三部分功能-委托打开新窗口:

复制代码 代码如下:

delegate void Mydelegate(string name, string id);
         Mydelegate md = null;
         public frmTree()
         {
             InitializeComponent();
         }
         /// <summary>
         /// 打开新窗口
         /// </summary>
         /// <param name="sender"></param>
         /// <param name="e"></param>
         private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
         {
             // 设置显示图标的变换
             if(null== e.Node.FirstNode)
             {
                 e.Node.ImageIndex = 1;
                 e.Node.SelectedImageIndex = 0;
             }
             // 打开新的窗口,每一级对应一类窗口
             if (e.Node != null && null == e.Node.FirstNode)
             {
                 string tag =e.Node.Tag.ToString();
                 string name = e.Node.Text.ToString();
                 switch(e.Node.Level)
                 {
                     case 0:
                         this.md= new Mydelegate(OpenForm1);
                         break;
                     case 1:
                         this.md = new Mydelegate(OpenForm2);
                         break;
                     case 2:
                         this.md = new Mydelegate(OpenForm3);
                         break;
                 }
                 md(name, tag);
             }
         }
         /// <summary>
         /// 打开新窗口
         /// </summary>
         /// <param name="name">传递参数</param>
         /// <param name="id">传递参数</param>
         public static void OpenForm1(string name,string id)
         {
             Form newForm = new Form1();
             newForm.ShowDialog();
         }
         public static void OpenForm2(string name, string id)
         {
             Form newForm = new Form2();
             newForm.ShowDialog();
         }
         public static void OpenForm3(string name, string id)
         {
             Form newForm = new Form3();
             newForm.ShowDialog();
         }

[!--infotagslink--]

相关文章

  • PHP实现无限级分类(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构、文章分类。无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式; 查找分类A下面所有分类包含的文章。1.实现原理 几种常见的实现方法,各有利弊。其中...2015-10-23
  • PHP实现递归无限级分类

    在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性。那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类。 递归,简单的说就是一段程序代码的重复调用,当把...2015-10-23
  • ecshop商品无限级分类代码

    ecshop商品无限级分类代码 function cat_options($spec_cat_id, $arr) { static $cat_options = array(); if (isset($cat_options[$spec_cat_id]))...2016-11-25
  • Vue.js 递归组件实现树形菜单(实例分享)

    本文主要对介绍利用Vue.js 的递归组件,实现了一个最基本的树形菜单。具有很好的参考价值,下面就跟着小编一起来看下吧...2017-01-09
  • jquery实现树形菜单完整代码

    这篇文章主要介绍了jquery实现树形菜单完整代码,需要的朋友可以参考下...2016-01-02
  • winform树形菜单无限级分类实例

    本文介绍了“winform树形菜单无限级分类实例”,需要的朋友可以参考一下...2020-06-25
  • php 无限级分类 获取顶级分类ID

    这篇文章主要介绍了php 无限级分类 获取顶级分类ID的相关代码,需要的朋友可以参考下...2016-03-15
  • php无限级分类实例三

    无限分灰一般都会用到递归来实现,下面我们来看看我提供的三个无限分类的读出方法。 数据库教程 -- -- Table structure for table `category` -- CREA...2016-11-25
  • php 无限级分类函数

    ar=array(0=>array('name'=>'食物','id'=>1,'pid'=>0), 02 1=>array('name'=>'植物','id'=>2,'pid'=>0), 03 3=>array(�...2016-11-25
  • 完整的新闻无限级分类代码,可添加,删除,移动,修改

    <?php教程 //连接数据库教程 $link = mysql教程_connect('localhost','root','密码') or die(mysql_error()); mysql_select_db('sortclass',$link); mysql_q...2016-11-25
  • ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法

    下面小编就为大家带来一篇ThinkPHP+EasyUI之ComboTree中的会计科目树形菜单实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-06-11
  • 分享一个php实现无限级分类程序代码

    无限级分类是所有程序开发中会碰到的一个问题,下面我来介绍php+mysql实现的一个无限级分类程序,有需要的朋友可参考参考。 下面给大家看看我的数据库结构吧:数据库...2016-11-25
  • 无限级分类

    首先要设计数据库教程,需要建一个表,里面存储分类信息,至少需要3个字段,第一个是主键(id),第二个是父级分类id(parentid),第三个是分类的名称(classname)。可能的一种效果是: i...2016-11-25
  • php 无限级分类

    class Trees{ private $_keyId = 'Id'; private $_keyName = 'Name'; private $_keyFid = 'Fid'; function __construct($keyId='',$keyName='',$keyFid=''...2016-11-25
  • C#递归方法实现无限级分类显示效果实例

    这篇文章主要介绍了C#递归方法实现无限级分类显示效果,结合完整实例形式分析了C#递归算法与数据元素遍历的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • js 树形菜单(php ajax可刷新)

    本文章是利用了js php ajax css实现的一款可刷新的js 树形菜单,如果你正在找这类型的类型的树形菜单可以进来免费下载。 代码如下 复制代码 ...2016-11-25
  • php无限级分类(带数据库)(1/2)

    这是一款利用递归写的php无限级分类代码,是一款树型的无限级分类实例,一的无限都是利用递归来实现的,也有更高级的写法,二叉树来实现无限分类了。 代码如下 ...2016-11-25
  • php+mysql无限级分类程序代码

    无限级分类主要就是数据库中表的存储,一个是父ID,一个是子ID通过他们来查询父级关系,然后出来我们想要的 表结构:id字段为分类标识,name字段为分类名,father_id字段为所...2016-11-25
  • php mysql实现无限级分类 树型显示分类关系

    无限级分类,主要是通过储存上级分类的id以及分类路径来实现。由于数据的结构简单,所以要将分类的关系由树状显示,我只能想到用递归的方式给于实现,下面是分类数据表结...2016-11-25
  • PHP用递归返回无限级分类回字符串或数组实例

    在栏目比较多的网站中,经常会用到无限分类,本文我们来分享一个用php递归实现的无限分类实例,实例的返回值可以选择是字符串还是数组,很实用。 在一些复杂的系统中,要...2016-11-25