winform树形菜单无限级分类实例
更新时间:2020年6月25日 11:43 点击:2649
以下实现的是一个树形菜单,每一级对应一类窗口,点击叶子节点时弹出新的窗口;
用递归和委托实现的。
第一部分功能-创建树形菜单
复制代码 代码如下:
/// <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();
}
上一篇: C# 获取属性名的方法
下一篇: C#: 引用变量与数值变量的区别
相关文章
- 无限级分类在开发中经常使用,例如:部门结构、文章分类。无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式; 查找分类A下面所有分类包含的文章。1.实现原理 几种常见的实现方法,各有利弊。其中...2015-10-23
- 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性。那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类。 递归,简单的说就是一段程序代码的重复调用,当把...2015-10-23
- ecshop商品无限级分类代码 function cat_options($spec_cat_id, $arr) { static $cat_options = array(); if (isset($cat_options[$spec_cat_id]))...2016-11-25
- 本文主要对介绍利用Vue.js 的递归组件,实现了一个最基本的树形菜单。具有很好的参考价值,下面就跟着小编一起来看下吧...2017-01-09
- 这篇文章主要介绍了jquery实现树形菜单完整代码,需要的朋友可以参考下...2016-01-02
- 本文介绍了“winform树形菜单无限级分类实例”,需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了php 无限级分类 获取顶级分类ID的相关代码,需要的朋友可以参考下...2016-03-15
- ar=array(0=>array('name'=>'食物','id'=>1,'pid'=>0), 02 1=>array('name'=>'植物','id'=>2,'pid'=>0), 03 3=>array(...2016-11-25
- 无限分灰一般都会用到递归来实现,下面我们来看看我提供的三个无限分类的读出方法。 数据库教程 -- -- Table structure for table `category` -- CREA...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- 首先要设计数据库教程,需要建一个表,里面存储分类信息,至少需要3个字段,第一个是主键(id),第二个是父级分类id(parentid),第三个是分类的名称(classname)。可能的一种效果是: i...2016-11-25
- 无限级分类是所有程序开发中会碰到的一个问题,下面我来介绍php+mysql实现的一个无限级分类程序,有需要的朋友可参考参考。 下面给大家看看我的数据库结构吧:数据库...2016-11-25
- class Trees{ private $_keyId = 'Id'; private $_keyName = 'Name'; private $_keyFid = 'Fid'; function __construct($keyId='',$keyName='',$keyFid=''...2016-11-25
- 这篇文章主要介绍了C#递归方法实现无限级分类显示效果,结合完整实例形式分析了C#递归算法与数据元素遍历的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 本文章是利用了js php ajax css实现的一款可刷新的js 树形菜单,如果你正在找这类型的类型的树形菜单可以进来免费下载。 代码如下 复制代码 ...2016-11-25
- 这是一款利用递归写的php无限级分类代码,是一款树型的无限级分类实例,一的无限都是利用递归来实现的,也有更高级的写法,二叉树来实现无限分类了。 代码如下 ...2016-11-25
- 无限级分类主要就是数据库中表的存储,一个是父ID,一个是子ID通过他们来查询父级关系,然后出来我们想要的 表结构:id字段为分类标识,name字段为分类名,father_id字段为所...2016-11-25
- 无限级分类,主要是通过储存上级分类的id以及分类路径来实现。由于数据的结构简单,所以要将分类的关系由树状显示,我只能想到用递归的方式给于实现,下面是分类数据表结...2016-11-25
- 在栏目比较多的网站中,经常会用到无限分类,本文我们来分享一个用php递归实现的无限分类实例,实例的返回值可以选择是字符串还是数组,很实用。 在一些复杂的系统中,要...2016-11-25