python treeview控件使用详解_winform Treeview控件使用

python treeview控件使用详解_winform Treeview控件使用做角色菜单权限时用到 treeview 控件做树状显示菜单 简单总结了一下用法 1 在 winform 窗体中拖入 treeview 控件 注意修改属性 CheckBoxes 属性为 true 即在节点旁显示复选框 2 后台动态加载数据库数据绑定到 treeview 上 子节点使用递归添加代码如下 循环添加 treeview 节点 for inti i

做角色菜单权限时用到treeview控件做树状显示菜单,简单总结了一下用法:

1.在winform窗体中拖入treeview控件,注意修改属性CheckBoxes属性为true,即在节点旁显示复选框

2.后台动态加载数据库数据绑定到treeview上,子节点使用递归添加

代码如下:

//循环添加treeview节点

for (int i = ; i < dm.Rows.Count - ; i++)//dm是数据库查出的数据表

{

//添加父节点(一级菜单)

if (int.Parse(dm.Rows[i][“Menu_Type”].ToString()) == )

{

TreeNode pnode = new TreeNode();

pnode.Text = dm.Rows[i][“Menu_Text”].ToString();

pnode.Tag = int.Parse(dm.Rows[i][“Menu_ID”].ToString());

treeView1.Nodes.Add(pnode);

//调用方法,添加子级菜单

AddChildnode(int.Parse(dm.Rows[i][“Menu_ID”].ToString()), pnode);

}

}

添加子级菜单的方法如下:

public void AddChildnode(int mid, TreeNode pnode)

{

RoleHandle rh = new RoleHandle();

DataTable dm = rh.Menu_Texts_Type();

for (int i = ; i < dm.Rows.Count - ; i++)

{

if (int.Parse(dm.Rows[i][“Menu_Parent”].ToString()) == mid)

{

TreeNode cnode = new TreeNode();

cnode.Text = dm.Rows[i][“Menu_Text”].ToString();

cnode.Tag = int.Parse(dm.Rows[i][“Menu_ID”].ToString());

pnode.Nodes.Add(cnode);

//调用本方法,递归

AddChildnode(int.Parse(dm.Rows[i][“Menu_ID”].ToString()), cnode);

}

}

}

3.获取角色对应的权限,有权限则勾选,没有权限则不管

我同样封装了一个方法,方法代码如下:

private void RoleChanged()

{

RoleHandle rh = new RoleHandle();

int roleId = GetSelectedRoleId();

//循环遍历treeview1所有根节点

for (int i = ; i < treeView1.Nodes.Count; i++)

{

//查询数据库判断是否有该权限

if (rh.RoleMenuCheck(int.Parse(treeView1.Nodes[i].Tag.ToString()), roleId) != null && rh.RoleMenuCheck(int.Parse(treeView1.Nodes[i].Tag.ToString()), roleId).Rows.Count > )

{

//如果有权限,则勾选该节点

treeView1.Nodes[i].Checked = true;

}

else

{

treeView1.Nodes[i].Checked = false;

}

//调用递归的方法判断其子节点

TreeViewAllNodes(treeView1.Nodes[i], roleId);

}

}

判断子节点菜单是否有权限的方法(即判断子节点是否应勾选)

private void TreeViewAllNodes(TreeNode parentNode, int roleId)

{

RoleHandle rh = new RoleHandle();

foreach (TreeNode node in parentNode.Nodes)

{

if (rh.RoleMenuCheck(int.Parse(node.Tag.ToString()), roleId) != null && rh.RoleMenuCheck(int.Parse(node.Tag.ToString()), roleId).Rows.Count > )

{

node.Checked = true;

}

else

{

node.Checked = false;

}

if (node.Nodes.Count > )//如果该节点下还有子节点

{

//运用递归,调用改方法

TreeViewAllNodes(node, roleId);

}

}

}

4.使用鼠标单击treeview节点事件,实现点击某treeview节点时的子节点和父节点联动,代码如下:

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)

{

//判断该节点状态(展开或折叠)

if (nodestate)

{

TreeNode node = e.Node;

if (node.Nodes.Count > )//包含子节点,实现子级联动

{

//实现子级联动的方法

SetTreeViewChecked(node);

}

if (node.Parent != null)//有父级菜单,实现父级联动

{

//实现父级联动的方法

SetParentNodeState(node);

}

nodestate = false;//修改节点状态

}

}

子级联动的方法如下:

private void SetTreeViewChecked(TreeNode node)

{

if (node == null)

{

return;

}

if (node.Nodes.Count > )//判断该节点下有子节点

{

foreach (TreeNode item in node.Nodes)

{

item.Checked = node.Checked;

//调用该方法,递归

SetTreeViewChecked(item);

}

}

}

父级联动方法如下:

private void SetParentNodeState(TreeNode node)

{

//定义变量用来设置父节点的选中情况,bool ck = false;假设子节点为全不选情况

bool ck = false;

TreeNode pn = node.Parent;

if (pn != null)

{

//假设所有子节点为全未选,循环判断是否有子节点选中

foreach (TreeNode item in pn.Nodes)

{

//如果有一个子节点是选中的,ck=true;

if (item.Checked)

{

ck = true;

break;

}

}

if (ck)

{

pn.Checked = true;

}

else

{

pn.Checked = false;

SetParentNodeState(pn);//递归

}

}

}

补充说明一下,鼠标单击treeview节点事件有点坑,折叠或展开节点时也会触发该事件,所以我使用了TreeView1_AfterCheck事件解决了这个问题

//设置全局变量,用来接收节点的状态

private bool nodestate = false;

private void RoleMenuForm_Load(object sender, EventArgs e)

{

//在窗体加载事件中注册方法treeView1.AfterCheck

treeView1.AfterCheck += TreeView1_AfterCheck;

}

//treeView1.AfterCheck方法

private void TreeView1_AfterCheck(object sender, TreeViewEventArgs e)

{

//改变节点状态

nodestate = true;

}

Winform TreeView控件技巧

在开发的时候经常使用treeview控件来显示组织结构啊,目录结构啊,通常会结合属性checkedboxs,来做选中,取消的操作下面是一个选中,取消的小例子,选中节点的时候,如果节点存在子节点,可以选 …

Winform – TreeView控件,只展开根目录

TreeNode类型是有Expand和ExpandAll这两个方法.而Treeview是只有ExpandAll的,想要展开根目录下面的节点的话 //只展开根目录 ) ].Expand();

WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色

本文转载:http://www.cnblogs.com/umplatform/archive/2012/08/29/2660240.html 在B/S开发中,对TreeView控件要改变当前选中节点的 …

Winform中Treeview控件失去焦点,将选择的节点设置为高亮显示 (2012-07-16 13:47:07)转载▼

Winform中Treeview控件失去焦点,将选择的节点设置为高亮显示 (2012-07-16 13:47:07)转载▼标签: winform treeview drawnode Treeview控 …

C#Winform中treeView控件使用总结

1.如何展开结点时改变图标(注意:不是选中时) 要在目录中使用图标首先要加入一个控件ImageList(命名为imageList1),然后可以按图片的index或名称引用图片. 然后需要在TreeVi …

C# TreeView 控件的综合使用方法

1.概述 该篇文章开发使用的语言c#,环境visualstudio2010,sql数据库.主要内容包括: (1)treeView控件添加根节点.子节点的基本方法,节点的删除. (2)把treeView …

C#编程,TreeView控件的学习

新建一个WinForm项目之后,在窗体中放入一个treeView控件(treeView1),根据数据库数据填充建立树节点.数据库的结构如下: ID        Title        P_ID a …

如何:使用TreeView控件实现树结构显示及快速查询

本文主要讲述如何通过使用TreeView控件来实现树结构的显示,以及树节点的快速查找功能.并针对通用树结构的数据结构存储进行一定的分析和设计.通过文本能够了解如何存储层次结构的数据库设计,如何快速使用 …

随机推荐

TCP/IP协议与UDP协议的区别

TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接.一个TCP连接必须要经过三次“对话”才能建立起来, …

OC中如何把数组中字典的数据转换成URL?

在使用objective-c语言开发iOS应用中,会向服务器通过URL请求一些数据,因此对URL的拼接肯定少不了.而在iOS中,我们一般是通过将字典中的数据拼接成我们要请求的URL字符串,那这个是怎么 …

UVA 1252 十五 Twenty Questions

十五 Twenty Questions Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submi …

[译]MongoDB 3.0发布说明

原文来自:http://docs.mongodb.org/manual/release-notes/3.0/ 2015年3月3日 MongoDB 3.0现已可供使用.关键新特性包括支持WiredTig …

基类和派生类–this

基类指针在程序运行的时候的确指向的是一个派生类的对象,但指针的类型仍然是基类指针.C++是一种强类型语言,因此不能用基类指针类型的指针直接调用派生类:而且,同一个类可能有多种不同的派生类,因此不知道实 …

Eclipse添加Spket插件实现ExtJs智能提示

1 . 开发环境 MyEclipse 12.0.0 ExtJs 4.2.1.883 Spket 1.6.23 2 . 下载资源 extjs 4.2.1.883 – http://www.sencha. …

Shell编程初步

一:Hello World 新建一个文件,命名时以 .sh 为后缀.每个bash文件开头第一行表名文件类型: #!/bin/bash 然后在下面输入代码. 比如输出hello world: #!/ …

JavaScript运算符与类型

1.运算符优先级 首先讲一下运算符的优先级,它决定了表达式中运算执行的先后顺序,优先级高的运算符最先被执行. 下面的表将所有运算符按照优先级的不同从高到低排列: 优先级 运算类型 关联性 运算符 19 …

c++中类的静态数据成员

有时需要为某个类的所有对象分配一个单一的存储空间,这个存储空间只是被这个类的对象访问,其他人不能访问,那么这时静态的成员变量是有用的.例如下面用来统计一共创建了多少个对象的变量num class cl …

hdu 5692(dfs序+线段树,好题)

Snacks Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub …

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220006.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午9:27
下一篇 2026年3月17日 下午9:27


相关推荐

  • 好玩的matlab程序_matlab怎么停止运行程序

    好玩的matlab程序_matlab怎么停止运行程序fs=44100;dt=1/fs;T16=0.125;t16=[0:dt:T16];[tempk]=size(t16);t4=linspace(0,4*T16,4*k);t8=linspace(0,2*T16,2*k);[tempi]=size(t4);[tempj]=size(t8);%Modificationfunctionsmod4=(t4.^4).*exp(-30*(t4.^0.5…

    2026年2月17日
    4
  • 云计算与虚拟化有什么区别?

    云计算与虚拟化有什么区别?目录一 云计算与虚拟化有何不同二 云和虚拟化的好处是什么 1 虚拟化的好处 2 云计算的好处三 云计算还是虚拟化 哪种最适合你 云 和 虚拟化 这两个术语常常让人产生困惑 常认为这两个词意味着相同的东西 实际上 云服务器 和 虚拟化专用服务器 VPS 虽然技术相似 但是您需要了解它们之间的显著差异从而选择恰当的产品来托管您的在线业务 一 云计算与虚拟化有何不同虚拟化是在单台服务器上创建多个虚拟环境的过程 它通过使用虚拟化软件来实现此目的 这使得可以在同一台服务器上同

    2026年3月19日
    2
  • CefSharp之二–如何看懂demo中的例子,以及按照例子进行开发「建议收藏」

    CefSharp之二–如何看懂demo中的例子,以及按照例子进行开发「建议收藏」CefSharp是做什么用的?请看前一篇文章:怎么用c#编写浏览器或者执行javascript代码?之后就是如何开发了。这个CefSharp最坑的是,还早不到文档,只能看着官方给的例子开发。项目地址那么就可以看到,带有example的都是例子。我给大家举2个例子。1.事件添加:我想让我的程序出了网页上的js代码,再额外的执行我自己写的js,怎么办呢?InitializeCom

    2026年1月23日
    7
  • php redis设置过期的键,redis 设置键过期时间[通俗易懂]

    php redis设置过期的键,redis 设置键过期时间[通俗易懂]键过期功能的相关命令设置生存时间:EXPIRE命令和PEXPIRE命令。设置过期时间:EXPIREAT命令和PEXPIREAT命令。查看剩余生存时间:TTL命令和PTTL命令。删除生存时间或过期时间:PERSIST命令。设置生存时间EXPIREkeyseconds将键key的生存时间设置为指定的秒数。PEXPIREkeymilliseconds将键ke…

    2026年4月13日
    2
  • 服务器pci数据捕获和信号处理 感叹号,PCI数据捕获和信号处理控制器win7驱动

    服务器pci数据捕获和信号处理 感叹号,PCI数据捕获和信号处理控制器win7驱动这是PCI数据捕获和信号处理控制器win7驱动下载,有些电脑在安装了系统后会在设备管理器中出现PCI数据捕获和信号处理控制器黄色感叹号提示,此时需要安装“IntelTurboBoost”驱动软件。软件介绍有时候我们装完系统的时候,各种驱动都安装完毕了,然后发现系统属性里面的设备管理器其他设备—PCI数据捕获和信号处理器控制器上还是有个问号,此款驱动就是解决这个问题的。PCI数据捕获和信号处理…

    2022年6月1日
    198
  • 优秀的有趣的博客

    优秀的有趣的博客昨晚和几个老同学小聚,聊得很开心。忘了到哪儿聊起一些牛人的博客,走得时候华仔还一直说要我一定记得把博客链接email给他。索性写个资源帖,记录一些我经常浏览的博客,并在此向所有提供,分享优秀资源的博主们致敬!也期待大家能留言推荐其他优秀的博客~大牛:刘未鹏http://mindhacks.cn/绝对的绝对的大牛,在大一时读到他的《我在南大的七年》,从此成了我和我身边很多朋友的必…

    2025年8月28日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号