TreeView控件使用教程11.TreeView控件TreeView控件显示Node对象的分层列表,每个Node对象均由一个标签和一个可选的位图组成。TreeView一般用于显示文档标题、索引入口、磁盘上的文件和目录、或能被有效地分层显示的其它种类信息。语法Treeview说明创建了TreeView控件之后,可以通过设置属性与调用方法对各Node对象进行操作,这些操作包括添加、删除、对齐和其它操作。可以编程展开与折回Node对象来显示或隐藏所有子节点。Collapse、Expand和NodeClick三个事件也提供编程功能。Node对象使用Root、Parent、Child、FirstSibling、Next、Previous和LastSibling属性。在代码中可通过检索对Node对象的引用,从而在树上定位。也可以使用键盘定位。UPARROW键和DOWNARROW键向下循环穿过所有展开的Node对象。从左到右、从上到下地选择Node对象。若在树的底部,选择便跳回树的顶部,必要时滚动窗口。RIGHTARROW键和LEFTARROW键也穿过所有展开的Node对象,但是如果选择了未展开的Node之后再按RIGHTARROW键,该Node便展开;第二次按该键,选择将移向下一个Node。相反,若扩展的Node有焦点,这时再按LEFTARROW键,该Node便折回。如果按下ANSI字符集中的键,焦点将跳转至以那个字母开头的最近的Node。后续的按该键的动作将使选择向下循环,穿过以那个字母开头的所有展开节点。控件的外观有八种可用的替换样式,它们是文本、位图、直线和+/-号的组合,Node对象可以任一种组合出现。TreeView控件使用由ImageList属性指定的ImageList控件,来存储显示于Node对象的位图和图标。任何时刻,TreeView控件只能使用一个ImageList。这意味着,当TreeView控件的Style属性被设置成显示图像的样式时,TreeView控件中每一项的旁边都有一个同样大小的图像。发行注意TreeView控件是MSCOMCTL.OCX文件中的一组ActiveX控件的一部分。为了在应用程序中使用TreeView控件,必须将MSCOMCTL.OCX文件2.Sorted属性(TreeView控件)返回或设置一值,此值确定Node对象的子节点是否按字母顺序排列。返回或设置一值,此值确定TreeView控件的根层节点是否按字母顺序排列。语法object.Sorted[=boolean]Sorted属性语法包含下面部分:部分描述object对象表达式,其值是“应用于”列表中的一个对象。boolean布尔表达式,表示Node对象是否已被排序如“设置值”中描述。设置值boolean的设置值是:设置值描述TrueNode对象根据它们的Text属性按字母顺序排列。其Text属性由数字开始的Node对象也作为字符串排序,第一个数字确定在排序中的初始位置,后面的数字确定以后的排序。FalseNode对象不排序。说明Sorted属性有两种用法,第一,在TreeView控件的根(顶)层排列Node对象,第二,对任何单个Node对象的立即子节点排序。例如,下面的代码是对TreeView控件的根节点排序:TreeView控件使用教程23.EnsureVisible方法这个方法确保指定的ListItem或Node对象是可视的。如果需要,这个方法可展开Node对象并滚动TreeView控件。该方法仅可滚动ListView控件。语法object.EnsureVisibleobject所在处代表一个对象表达式,其值是“应用于”列表中的一个对象。返回值值描述True如果ListView或TreeView控件必须滚动与/或扩展以显露该对象,该方法返回True。False如果不需滚动与/或展开,该方法返回False。说明一个特定的Node或ListItem对象可能深藏于TreeView或ListView控件中,当要使其为可视时,使用EnsureVisible方法。如果Scroll属性设置为False,则该方法将不会在TreeView控件上起作用。4.Node对象和Nodes集合Node对象是TreeView控件中的一项,它包含图像和文本。Nodes集合包含一个或多个Node对象。语法treeview.Nodestreeview.Nodes.Item(index)以上语法行,按照标准集合语法分别引用集合与集合中的单独元素。treeview对象表达式,其值是TreeView控件。index整数或字符串,它唯一地标识Nodes集合的一个成员。整数是Index属性的值,字符串是Key属性的值。说明节点可包含文本和图片。然而,要使用图片,必须用ImageList属性关联一个ImageList控件。图片可以根据节点的状态而改变;例如,如果将SelectedImage属性设置为来自关联的ImageList的图像,则被选中的节点可拥有与未选中的节点不同的图片。5.Add方法(Nodes集合)在Treeview控件的Nodes集合中添加一个Node对象。语法object.Add(relative,relationship,key,text,image,selectedimage)Add方法的语法包含下面部分:描述object必需的。对象表达式,其值是“应用于”列表中的一个对象relative可选的。已存在的Node对象的索引号或键值。新节点与已存在的节点间的关系,可在下一个参数relationship中找到。relationship可选的。指定的Node对象的相对位置,如设置值中所述。key可选的。唯一的字符串,可用于用Item方法检索Node。text必需的。在Node中出现的字符串。image可选的。在关联的ImageList控件中的图像的索引。selectedimage可选的。在关联的ImageList控件中的图像的索引,在Node被选中时显示。设置值relationship的设置值是:TreeView控件使用教程36.Root属性(Node对象)返回对所选Node的根Node对象的引用。语法object.Rootobject所在处代表是对象表达式,其值是“应用于”列表中的对象说明Child、FirstSibling、LastSibling、Previous、Parent、Next和Root各属性全将返回对另一个Node对象的引用。因此,可以同时引用并执行对Node的操作,如下所示:WithTreeView1.Nodes(x).Root.Text=Newtext.Key=Newkey.SelectedImage=3EndWith也可以将对象变量设置为被引用的Node,如下所示:DimNodRootAsNode'得到对节点x的根的引用。SetNodRoot=TreeView1.Nodes(x).Root'用此引用执行对根节点的操作。WithnodRoot.Text=Newtext'改变文本。.Key=Newkey'改变键。.SelectedImage=3'改变SelectedIma7.Parent属性(Node对象)这个属性返回或设置Node对象的父对象。仅在运行时可用。语法object.Parent[=node]Parent属性的语法包含下面部分:部分描述object对象表达式,其值是“应用于”列表中的一个对象。node变成该对象的父对象的Node对象。说明在运行时,设置这个属性为一个对象的操作不能搞成一个循环,否则便发生错误。例如,不能将任何Node设置成为其后代的子Node。Child、FirstSibling、LastSibling、Previous、Parent、Next和Root属性都返回对另一个Node对象的引用。所以可以同时引用并执行对一个Node的操作,如下所示:WithTreeView1.Nodes(x).Parent.Text=Newtext.Key=Newkey.SelectedImage=3EndWith也可以将对象变量设置为引用的Node,如下所示:DimNodParentAsNodePrivateSubTreeView1_DragDrop(SourceAsControl,xAsSingle,yAsSingle)'如果用户没移动鼠标,或在无效区释放它。IfTreeView1.DropHighlightIsNothingThenindrag=FalseExitSubElse'设置被拖动的节点的parent属性为目标节点。OnErrorGoTocheckerror'阻止循环错误。SetnodX.Parent=TreeView1.DropHighlightClsPrintTreeView1.DropHighlight.Text&_isparentof&nodX.Text'释放DropHighlight引用。SetTreeView1.DropHighlight=Nothingindrag=FalseExitSub'如未发生错误则退出。EndIfcheckerror:'定义表示VisualBasic错误代码的常数。ConstCircularError=35614IfErr.Number=CircularErrorThenDimmsgAsStringmsg=Anodecan'tbemadeachildofitsownchildren.'显示带有一个感叹号图标'和“确定”与“取消”按钮的消息框。IfMsgBox(msg,vbExclamation&vbOKCancel)=vbOKThen'释放9.Children属性这个属性返回包含在Node对象中的各子Node对象的个数。语法object.Childrenobject所在处代表一个对象表达式,其值是“应用于”列表中的一个对象。说明在执行一个影响子节点的操作之前,可用Children属性检查Node对象是否有子节点。例如,以下代码在检索第一个Node的Text属性之前,使用Child属性检查子节点的存在。PrivateSubTreeView1_NodeClick(ByValNodeAsNode)IfNode.Children0ThenMsgBoxNode.Child.TextEndIfEndSubChildren属性示例这个例子在TreeView控件中放置几个Node对象。这组代码检查Node是否有子节点。如果有,则显示子节点的文本。为试用此例,在窗体上安放一个TreeView控件,并在窗体的声明部分中粘贴下面的代码。运行此例,单击Node对象以选择它,然后单击该窗体来察看Node对象的子节点的文本。OptionExplicitPrivateSubForm_Click()DimstrCAsStringDimNAsIntegerIfTreeView1.SelectedItem.Children0Then'有子节点。10.FirstSibling属性(Node对象)这个属性返回对TreeView控件中的Node对象的第一个相邻对象的引用。语法object.FirstSiblingobject所在处代表一个对象表达式,其值是“应用于”列表中的一个对象说明第一个相邻节点是出现在一个节点层中第一个位置上的Node。实际上到底是哪一个Node出现在第一个位置取决于在那一层上的Node对象是否被排序,这由Sorted属性确定。Child、FirstSibling、LastSibling、Previous、Parent、Next和Root属性都返回对另一个Node对象的引用。所以可以同时引用并执行对一个Node的操作,如下所示:WithTreeView1.Nodes(x).FirstSibling.Text=Newtext.Key=Newkey.SelectedImage=3EndWith也可以将对象变量设置为引用的Node,如下所示:DimNodFirstSibAsNode'获取Nodex的