社区
组件/控件开发
帖子详情
TreeView控件扩展问题,本帖急,解决结贴。
zhchg6666
2008-07-24 11:16:42
由于项目要求,需要对TreeView控件做进一步的扩展,
具体要求如下:
1 每一个TreeNode要求对应多个状态图标。
2 每一个TreeNode对应一个CheckBox
3 TreeNode的任何一个状态图标,或则文字,或者CheckBox被点击要求触发相应的事件。
请问:
目前不做扩展,是否可以实现该功能?
有没有第三方控件实现该功能?
若做扩展,需要做哪些工作?
本帖急,解决结贴。
...全文
232
17
打赏
收藏
TreeView控件扩展问题,本帖急,解决结贴。
由于项目要求,需要对TreeView控件做进一步的扩展, 具体要求如下: 1 每一个TreeNode要求对应多个状态图标。 2 每一个TreeNode对应一个CheckBox 3 TreeNode的任何一个状态图标,或则文字,或者CheckBox被点击要求触发相应的事件。 请问: 目前不做扩展,是否可以实现该功能? 有没有第三方控件实现该功能? 若做扩展,需要做哪些工作? 本帖急,解决结贴。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wocow2316
2008-07-25
打赏
举报
回复
我就你的那些功能,帮你做了一个Demo,
程序下载地址:
http://download.csdn.net/source/554239
zhchg6666
2008-07-25
打赏
举报
回复
[Quote=引用 10 楼 wocow2316 的回复:]
你说的几个功能,都可以实现
1.状态对以多个图标,其实,就是StateImageList
绑定一个 ImageList ,然后改变 ImageIndex 就可以
2.每个node 对应一个 checkbox ,其实这个checkbox 不是真正的checkbox
其实 也是图片,这是三张不同的图片,选中的,不选中的,和 半选中的图片,来回的变换,看上去就像checkbox
3.对于你点的是状态图标,还是文字,都可以判断的响应
你看以通过,点击的坐标了判断是选中了什么
这…
[/Quote]
关于你说的第一条,我想确认一下是否我理解上有偏差,我想做到的效果是一个TreeNode同时对应多个图片,展示出现的一个TreeNode的效果应该类似于 checkBox pic1 pic2 pic3 pic4... 文字,如此。
wocow2316
2008-07-25
打赏
举报
回复
treeView 关于这个功能我找不到以前做的demo了
不过你还可以用第三方 dev 空间 treelist 实现,它的核心代码如下
//初始化
private void InitData() {
DevExpress.XtraTreeList.Design.XViews xv = new DevExpress.XtraTreeList.Design.XViews(treeList1);
treeList1.SelectImageList = null;
try {
SetCheckedNode(treeList1.Nodes[0].Nodes[0]);
}
catch { }
}
//获取选中的状态
private CheckState GetCheckState(object obj) {
if(obj != null) return (CheckState)obj;
return CheckState.Unchecked;
}
//设置选择的节点
private void SetCheckedNode(DevExpress.XtraTreeList.Nodes.TreeListNode node) {
CheckState check = GetCheckState(node.Tag);
if(check == CheckState.Indeterminate || check == CheckState.Unchecked) check = CheckState.Checked;
else check = CheckState.Unchecked;
treeList1.BeginUpdate();
node.Tag = check;
SetCheckedChildNodes(node, check);
SetCheckedParentNodes(node, check);
treeList1.EndUpdate();
}
//</treeList1>
//设置孩子节点
private void SetCheckedChildNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check) {
for(int i = 0; i < node.Nodes.Count; i++) {
node.Nodes[i].Tag = check;
SetCheckedChildNodes(node.Nodes[i], check);
}
}
//设置父亲节点
private void SetCheckedParentNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check) {
if(node.ParentNode != null) {
bool b = false;
CheckState state;
for(int i = 0; i < node.ParentNode.Nodes.Count; i++) {
if(node.ParentNode.Nodes[i].Tag == null) state = CheckState.Unchecked;
else state = (CheckState)node.ParentNode.Nodes[i].Tag;
if(!check.Equals(state)) {
b = !b;
break;
}
}
node.ParentNode.Tag = b ? CheckState.Indeterminate : check;
SetCheckedParentNodes(node.ParentNode, check);
}
}
//<treeList1>
private void treeList1_GetStateImage(object sender, DevExpress.XtraTreeList.GetStateImageEventArgs e) {
CheckState check = GetCheckState(e.Node.Tag);
if (check == CheckState.Unchecked)
e.NodeImageIndex = 0;
else if (check == CheckState.Checked)
e.NodeImageIndex = 1;
else e.NodeImageIndex = 2;
}
private void treeList1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) {
if(e.KeyData == Keys.Space)
SetCheckedNode(treeList1.FocusedNode);
}
//判断选中节点的位置,主要判断 HitInfoType 的类型,下面的是,当选中StateImage时候响应
//if(hInfo.HitInfoType == HitInfoType.StateImage)
private void treeList1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) {
if(e.Button == MouseButtons.Left) {
DevExpress.XtraTreeList.TreeListHitInfo hInfo = treeList1.CalcHitInfo(new Point(e.X, e.Y));
if(hInfo.HitInfoType == HitInfoType.StateImage)
SetCheckedNode(hInfo.Node);
}
}
wocow2316
2008-07-25
打赏
举报
回复
你说的几个功能,都可以实现
1.状态对以多个图标,其实,就是StateImageList
绑定一个 ImageList ,然后改变 ImageIndex 就可以
2.每个node 对应一个 checkbox ,其实这个checkbox 不是真正的checkbox
其实 也是图片,这是三张不同的图片,选中的,不选中的,和 半选中的图片,来回的变换,看上去就像checkbox
3.对于你点的是状态图标,还是文字,都可以判断的响应
你看以通过,点击的坐标了判断是选中了什么
这些功能,我以前都实现过
哈皮玩
2008-07-25
打赏
举报
回复
[Quote=引用 1 楼 xhan2000 的回复:]
1无法实现
2可以
3文字和chechkbox可以实现点击事件
[/Quote]
[Quote=引用 5 楼 zhchg6666 的回复:]
顶起 100分白送
[/Quote]
等楼主散分!
希望楼主早日研究出来。
cheng_feng001
2008-07-25
打赏
举报
回复
up
HW_zxc_002
2008-07-25
打赏
举报
回复
up
zhchg6666
2008-07-25
打赏
举报
回复
顶起 100分白送
zhchg6666
2008-07-25
打赏
举报
回复
问题解决:
本来自己重画,弄了半天弄出来了,很难看。
自己重画需要继承TreeView
绑定一个DrawNode方法,实现之。
后来找到一个控件,做稍许改动可以完全满足我的要求。
有类似需求的同志可以参考:
http://www.codeproject.com/KB/tree/treeviewadv.aspx
zhchg6666
2008-07-25
打赏
举报
回复
up
zhchg6666
2008-07-25
打赏
举报
回复
楼上二位大哥
多谢费心了
我想我们的理解还是有偏差的,是我没有说清楚
简单的说 我需要实现 每个TreeNode对应一排图片,且这一排图片中的任何一个都要可以响应单击事件
我想,如果不重绘TreeNode是无法实现的
liushuyong08
2008-07-25
打赏
举报
回复
用treeview本身就可以实现的.好好利用它的属性方法.
jl_lsj
2008-07-24
打赏
举报
回复
up
zhchg6666
2008-07-24
打赏
举报
回复
关键是 每一个TreeNode要求对应多个状态图标 且每个图标要有鼠标事件
xhan2000
2008-07-24
打赏
举报
回复
1无法实现
2可以
3文字和chechkbox可以实现点击事件
zhchg6666
2008-07-24
打赏
举报
回复
顶起 100分白送
zhchg6666
2008-07-24
打赏
举报
回复
世界真奇妙,100分都没人来拿。。。。。。。。。
.NET-
TreeView
控件
扩展
功能:CheckBoxs父子选中状态同步和自动调整
.NET System.Windows.Forms命名
控件
中
TreeView
组件,有一个CheckBoxs属性,控制着这个
控件
每个节点前是否显示勾选框,如果设置为true,所有节点的勾选框选中,反之都不选中;如果选中父节点,子节点不会自动选中。根据需求,自动
扩展
了这个
控件
,使具备父子选中状态同步。如果鼠标离开这个
控件
,通过鼠标单击,隐藏复选框,否则进入某个节点,单击,显示复选框。
增强型
Treeview
控件
TreeView
控件
缺点是无法快速应用于数据库绑定显示数据及即时编码,这个增强型
控件
简化了复杂的数据关联显示,我们可以灵活的绑定数据库,减少编码量.主要特点有: A.支持简单的和复杂的数据关联 B.递归纪录连接 C.一对多数据关联 D.一个纪录可能被显示多时期- 同样纪录的各个事例可能是充分地定制的i 。e 。 不同的图象, 颜色, 等... E.无限数据关联和多层嵌套 F.自定义过滤标准 G.自定义排序--使用SQL "ORDER BY"子句代替而不是使用每个Node的.Sort属性
毕业设计 基于ASP.NET在线知识管理系统成品课程讲解
该课程中应用到MasterPage模板页、
TreeView
导航
控件
、用户自定义
控件
、数据验证
控件
等ASP.NET服务器端
控件
。 该课程可以作为课程设计、大作业或毕业设计作品的思路参考。 、注意:学院会员可以免费学习部分课程 ,...
winform(c#) 自定义
treeview
控件
自定义
treeview
控件
,对原组件
扩展
了几个属性,根据编码的条件,对
treeview
进行分级。
c# 三态
treeview
控件
v1.1
1、使用了直接向windows
控件
发送消息的方法来控制
treeview
的行为,直接替换state image list 2、纯粹的三态树结构,未添加父子节点联动等效果,给
控件
使用者更多的自由 3、增加三态的树节点类型,直接把状态保存在树节点中,而不是勉强地在
treeview
控件
里面打补丁,使用更流畅 4、应用csc3.5的技术,直接
扩展
TreeNodeCollection类,增加插入3态节点的函数,不改变编程习惯 5、增加了对BeforeCheck和AfterCheck事件的支持,允许用户自行对状态的改变进行控制
组件/控件开发
8,834
社区成员
7,151
社区内容
发帖
与我相关
我的任务
组件/控件开发
.NET技术 组件/控件开发
复制链接
扫一扫
分享
社区描述
.NET技术 组件/控件开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章