TreeView如何实现联动,选择一个子节点,其父节点虚选择

问题描述

类型:VB.NETWINFORMTreeView如何实现联动,选择一个子节点,其父节点虚选择如上:这是效果,PS的谁能提供个实例

解决方案

解决方案二:
.net中的TreeView控件,是實現不了這個功能的,因為牠的選擇框,衹有兩個狀態Checked和UnChecked可以從TreeView派生一個新類來實現,請參考這篇文章
解决方案三:
应该可以用StateImageList选中状态StateImageList的图片列表变换来实现以上效果设置StateImageList怎么弄有没有这方面的资料啊
解决方案四:
又自己解决,不过还是谢谢大家了.把代码共享给需要的朋友首先建立一个ImageList在ImageList里分别放置为钩选,钩选,未知钩选三个图片然后StateImageList里选择该ImageList模块:ModuleDiyTreeViewPublicTreeView_Check_ChangedAsBoolean=True#Region"TreeViewCheckBox联动"PrivateEnumNodeStateAllUnSelected=0'全不选AllSelected=1'全选SomeSelected=2'部分选定EndEnumPublicSubcheckChanged(ByValtreeAsTreeView,ByValeAsMouseEventArgs)IfNotTreeView_Check_ChangedThenTreeView_Check_Changed=TrueExitSubEndIfDimnAsTreeNoden=tree.GetNodeAt(e.X,e.Y)IfnIsNothingThenExitSubEndIfIfn.GetNodeCount(False)>0And(n.ParentIsNothing)ThenIfn.StateImageIndex=0Thenn.StateImageIndex=1ElseIfn.StateImageIndex=1Orn.StateImageIndex=2Thenn.StateImageIndex=0EndIfChangeAllChildNodesState(n,CType(n.StateImageIndex,NodeState))ElseIfn.GetNodeCount(False)>0And(Not(n.ParentIsNothing))ThenIfn.StateImageIndex=0Thenn.StateImageIndex=1ElseIfn.StateImageIndex=1Orn.StateImageIndex=2Thenn.StateImageIndex=0EndIfChangeAllChildNodesState(n,CType(n.StateImageIndex,NodeState))ChangeAllParentState(n)ElseIfn.GetNodeCount(False)=0And(Not(n.ParentIsNothing))ThenIfn.StateImageIndex=0Thenn.StateImageIndex=1ElseIfn.StateImageIndex=1Orn.StateImageIndex=2Thenn.StateImageIndex=0EndIfChangeAllParentState(n)ElseIfn.GetNodeCount(False)=0And(n.ParentIsNothing)ThenIfn.StateImageIndex=0Thenn.StateImageIndex=1ElseIfn.StateImageIndex=1Orn.StateImageIndex=2Thenn.StateImageIndex=0EndIfEndIfEndSub'改变n的所有子节点的状态PrivateSubChangeAllChildNodesState(ByValnAsTreeNode,ByValNodeStateDesAsNodeState)DimmyEnumeratorAsIEnumerator=n.Nodes.GetEnumerator()WhilemyEnumerator.MoveNext()CType(myEnumerator.Current,TreeNode).StateImageIndex=NodeStateDesChangeAllChildNodesState(CType(myEnumerator.Current,TreeNode),NodeStateDes)EndWhileEndSub'n为当前节点(而要被改变状态的是n的父节点,也就是n.parent)PrivateSubChangeAllParentState(ByValnAsTreeNode)DimblnAllUnSelected,blnAllSelectedAsBooleanIfn.ParentIsNothingThenExitSubEndIfDimmyEnumeratorAsIEnumerator=n.Parent.Nodes.GetEnumerator()WhilemyEnumerator.MoveNext()IfCType(myEnumerator.Current,TreeNode).StateImageIndex=2Thenn.Parent.StateImageIndex=2CallChangeAllParentState(n.Parent)ReturnElseIfCType(myEnumerator.Current,TreeNode).StateImageIndex=1ThenIfblnAllUnSelectedThenn.Parent.StateImageIndex=2CallChangeAllParentState(n.Parent)ReturnElseblnAllSelected=TrueEndIfElseIfCType(myEnumerator.Current,TreeNode).StateImageIndex=0ThenIfblnAllSelectedThenn.Parent.StateImageIndex=2CallChangeAllParentState(n.Parent)ReturnElseblnAllUnSelected=TrueEndIfEndIfEndWhileIfblnAllSelectedAndNotblnAllUnSelectedThenn.Parent.StateImageIndex=1CallChangeAllParentState(n.Parent)ReturnEndIfIfblnAllUnSelectedAndNotblnAllSelectedThenn.Parent.StateImageIndex=0CallChangeAllParentState(n.Parent)ReturnEndIfEndSub#EndRegionEndModule

使用方法:DimnewNodeAsNewTreeNode(strText)newNode.StateImageIndex=0'加上这句,加载后全部未钩选nodes.Add(newNode).......'递归加载树然后:PrivateSubmainTreeViewMouseUp(ByValsenderAsObject,ByValeAsWindows.Forms.MouseEventArgs)HandlesTreeView1.MouseUpcheckChanged(TreeView1,e)EndSubPrivateSubTreeViewBeforeCollapse(ByValsenderAsObject,ByValeAsWindows.Forms.TreeViewCancelEventArgs)HandlesTreeView1.BeforeCollapse,TreeView1.BeforeExpandTreeView_Check_Changed=FalseEndSub

解决方案五:
我现在发现这里的很多朋友,自己解决的问题,不告诉大家自己是如何解决的,所以希望大家以后如果自己解决的问题能在帖子上说下解决方法.
解决方案六:
自己写代码做事件,没有现成的
解决方案七:
你可以做成组件
解决方案八:
http://download.csdn.net/source/279669
解决方案九:
这个是我写的组件选择框支持1.选定状态2.未选定3.部分选定4.可以自己定义三状态的图片(设置一个StateImage)0:未选;1:钩选;2:部选5.可以设置从默认已经钩选项目SelectNodes(nodes,str)nodes:需要遍历的节点str:Node的Tag,用来比较是否是需要的节点,所以Tag值必须不一样语言:VB.NET2005调用:VS2005工具箱加入即可

时间: 2024-08-22 14:15:17

TreeView如何实现联动,选择一个子节点,其父节点虚选择的相关文章

WEB页面TreeView的应用-(得到所有选中的节点)

treeview|web|选中|页面         在WEB的TreeView中可以使用CheckBox来设置TreeView的节点是否可以选中,是大家都知道的.我们在项目进程中也用到该方法,这里把具体实现的方法给出.希望大家有更好的方案提出.         先制定节点选择的规则:          子节点选中,自动添加父节点到记录中:父节点选中,但子节点未选中的,仅仅添加父节点. 实现的代码,C#代码页面如下: ################################### usi

winfrom用treeview添加删除数据时,到底怎么选中节点?

问题描述 RT这是UI界面,可以读取数据库中的数据,但是添加删除都不行.说没选中节点.privatevoidbtnAdd_Click(objectsender,EventArgse){//新建txtNewCategoryNameif(bllCategory.CategoryNameIsExists(txtNewCategoryName.Text.Trim())){MessageBox.Show("该分类名称已存在,不能重复!","提示");}else{//非空判断,

【求助】treeview点击后Datagridview联动

问题描述 [求助]treeview点击后Datagridview联动:比如我的treeview是多级树,就像阿锴说的行政区划表生成的Treeview,然后点击,想让右边DatagridView实现联动.比如点击北京市--显示所有北京市的下属县市在DatagridView中,若点击的是末端节点(某个区),则只显示末端节点数据.在线等. 解决方案 解决方案二:请各位高手们指点指点.谢谢!解决方案三:如:表结构为userid:username难点在传递数据的时候,只能传递treeview1.selec

WPF中TreeView控件在选中节点后如何获取其父节点,再父节点信息

问题描述 winform中TreeView控件中,在选中某个节点后,可以用e.Node.Parent来获取其父节点信息,再父节点可以用e.Node.Parent.Parent,而在WPF中此方法似乎不行,如,在选中某个节点后TreeViewItemitem=(TreeViewItem)treeCourseInfo.SelectedItem;可以获取该节点的信息if(item.Header.ToString()=="科目信息",但是不知该如何获取其父节点,再父节点.....信息,各位有谁

常见的五类排序算法图解和实现(选择类:简单选择排序,锦标赛排序,树形选择排序,堆排序)

选择类的排序算法 简单选择排序算法 采用最简单的选择方式,从头到尾扫描待排序列,找一个最小的记录(递增排序),和第一个记录交换位置,再从剩下的记录中继续反复这个过程,直到全部有序. 具体过程: 首先通过 n –1 次关键字比较,从 n 个记录中找出关键字最小的记录,将它与第一个记录交换. 再通过 n –2 次比较,从剩余的 n –1 个记录中找出关键字次小的记录,将它与第二个记录交换. 重复上述操作,共进行 n –1 趟排序后,排序结束. 如图   过程图解 令 k=i:j = i + 1: 目

浅谈js的html元素的父节点,子节点_javascript技巧

parentNode和parentElement功能一样,childNodes和children功能一样.但是parentNode和childNodes是符合W3C标准的,可以说比较通用.而另外两个只是IE支持,不是标准,Firefox就不支持 示例: "parentNode" 常用来获取某个元素的父节点. 把 parentNodes 理解为容器, 在容器中有个子节点 ,如下: <div id="parent"> <b id="child

asp.net c# 删除节点与节点重命名代码

asp教程.net c# 删除节点与节点重命名代码 private void menuitemdelete_click(object sender, system.eventargs e) { try { if(messagebox.show(this,"删除节点<"+treeview.selectednode.text.trim()+">,与其对应的信息也将被删除,你确定要删除吗?","information",messagebox

开机老是要选择要启动的系统怎么样不用选择

电脑开机的时候,老是要自己人为的选择启动系统才能进入,不能默认进入自己想要的系统. 1 问题出现的原因: 最近我安装了Windows 7,是覆盖安装的,没有格式化C盘,安装程序提示保留原来的系统为一个文件夹,但不能登录原来的系统!我把那个文件夹删了,释放了硬盘空间.但现在每次系统登录界面都要选择系统进入,一个是Windows 7,一个是原来的系统.怎样去除启动菜单直接进入Windows 7呢? 2 解决方法一: 图形界面方法:依次点击"开始→运行",输入msconfig并确定,在 Bo

link环境下如何选择一个变量?是不是只能查询选择的变量?

问题描述 link环境下如何选择一个变量?是不是只能查询选择的变量? link环境下如何选择一个变量?是不是只能查询选择的变量? 解决方案 Select函数?它会执行一个对数据集的迭代,当然是只能一次操作一个元素 解决方案二: 表示 没听懂 -_-