社区
组件/控件开发
帖子详情
TreeView控件扩展问题,本帖急,解决结贴。
zhchg6666
2008-07-24 11:16:42
由于项目要求,需要对TreeView控件做进一步的扩展,
具体要求如下:
1 每一个TreeNode要求对应多个状态图标。
2 每一个TreeNode对应一个CheckBox
3 TreeNode的任何一个状态图标,或则文字,或者CheckBox被点击要求触发相应的事件。
请问:
目前不做扩展,是否可以实现该功能?
有没有第三方控件实现该功能?
若做扩展,需要做哪些工作?
本帖急,解决结贴。
...全文
244
17
打赏
收藏
TreeView控件扩展问题,本帖急,解决结贴。
由于项目要求,需要对TreeView控件做进一步的扩展, 具体要求如下: 1 每一个TreeNode要求对应多个状态图标。 2 每一个TreeNode对应一个CheckBox 3 TreeNode的任何一个状态图标,或则文字,或者CheckBox被点击要求触发相应的事件。 请问: 目前不做扩展,是否可以实现该功能? 有没有第三方控件实现该功能? 若做扩展,需要做哪些工作? 本帖急,解决结贴。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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分都没人来拿。。。。。。。。。
VB6.0设计真正实用的
TreeView
控件
VB6.0设计真正实用的
TreeView
控件
快速掌握
treeview
控件
希望这个文档对喜欢vb的朋友有帮助,也希望朋友们喜欢
TreeView
控件
动态添加MenuStrip
控件
TreeView
控件
动态添加MenuStrip
控件
ASP.NET AJAX的
TreeView
控件
模板
ASP.NET AJAX的
TreeView
控件
模板,c#源代码。
Winform的
TreeView
控件
实现节点多选
在一个前辈的代码基础上修改的,他的下载回来后,发现在按shift多选时会出错,故在其基础上修改。
组件/控件开发
8,833
社区成员
7,151
社区内容
发帖
与我相关
我的任务
组件/控件开发
.NET技术 组件/控件开发
复制链接
扫一扫
分享
社区描述
.NET技术 组件/控件开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章