1、列表框类控件第8章 高级窗口控件主编:郑阿奇主编:郑阿奇PowerBuilder实用实用教程教程(第(第5版版)列表框类控件它们的作用是类似的,都是提供给用户一组可选或可视的选项,允许用户从中选择一项或多项;属性也十分相似,表8.1为列表框类控件的通用属性及说明。属 性说 明DisableNoScroll选中时,始终显示滚动条ExtendedSelect允许用户同时选中多个项目,允许时可以按下【Shift】键后单击鼠标选中连续多项,或按下【Ctrl】键后单击选中不连续的多项,或拉出矩形框选中框内多项MultiSelect允许用户同时选中多个项目,但只能通过鼠标单击选择AllowEdit允许在编
2、辑框中进行编辑ShowList使下拉列表框变为列表显示,失去下拉功能Item用于输入列表框中的项目列表框类控件列表框类控件的事件有Constructor(构造)、DoubleClicked(双击)、SelectionChanged(改变选项)等。列表框控件命名时的默认前缀为“lb_”,图片列表框控件命名时的默认前缀为“plb_”,下拉图片列表框控件命名时的默认前缀为“dplb_”。列表框类控件显示的项目,既可以在“Items”属性页的列表框中直接输入,也可以在程序中使用AddItem()函数动态添加。目 录列表框控件的常用属性、事件和函数011列表框控件的常用属性列表框控件的常用属性2列表框控
3、件的常用事件列表框控件的常用事件3列表框控件的常用函数列表框控件的常用函数1列表框控件的常用属性Sorted属性:指定列表框中的列表项是否自动按升序次序排列。取值:True表示自动排序;False表示不排序。MultiSelect属性:指定用户是否能够同时选择多个列表项,但只能通过鼠标单击来选择。取值:True表示用户能够选择多个列表项(通过单击选择);False表示不允许用户选择多个列表项ExtendedSelect属性:指定用户能否同时选择多个列表项。取值:True表示用户能够选择多个列表项。(1)(2)(3)列表框控件的常用属性有如下三种2列表框控件的常用事件(1)DubleClicke
4、d事件:当双击鼠标时触发。(2)SelectionChanged事件:当选择了列表框中某个列表项时触发。3列表框控件的常用函数(1)AddItem()函数:在列表项的尾部增加一个新的列表项。如果该控件的Sorted属性被设置为True,则列表项插入后重新对列表项排序。格式格式:AddItem(String item)返回值为Integer,新加入项的索引号。例如:例如:lb_1.additem(white)(2)DeleteItem()函数:删除指定的列表项。格式:格式:DeleteItem(Int index)其中,index为要删除列表项的位置编号。例如,删除lb_1对象第三个列表项:lb
5、_1.deleteitem(3)3列表框控件的常用函数(3)SelectedIndex()函数:返回列表框控件中所选列表项的索引。当有多个列表项被选中时,该函数返回第一个选中列表项的索引。格式格式:SelectedIndex()返回值为Integer型,所选列表项的索引。例如:例如:Integer li_noli_no=lb_1.SelectedIndex()(4)SelectedItem()函数:返回列表框控件中所选列表项的文本。当有多个列表项被选中时,该函数返回第一个选中列表项的文本。格式:格式:SelectedItem()返回值为String,所选列表项的文本。例如:例如:String
6、lb_itemlb_item=lb_1.SelectedItem()3列表框控件的常用函数(5)Text()函数:返回列表框中指定列表项的文本。格式格式:Text(Int index)返回值为String,第index项的文本。例如:例如:String s1s1=lb_1.text(3)(6)TotalItems()函数:返回列表框中列表项的总数。格式:格式:TotalItems()返回值为Integer,列表框中列表项的总数。(7)TotalSelected()函数:返回列表框中选中列表项的总数。格式:格式:TotalSelected()返回值为Integer,列表框中选中列表项的总数。3列
7、表框控件的常用函数(8)State()函数:确定列表框中某项是否被选中(是否高亮显示)。格式格式:State(Int index)如果index参数指定的列表项处于选中状态(高亮显示),则函数返回1;否则函数返回0。如果index参数指定的不是一个有效的列表项,则函数返回-1。如果任何参数的值为Null,则State()函数返回Null。例如例如:Integer li_sli_s=lb_1.State(3)IF li_s=1 THEN END IF(9)InsertItem()函数:在指定索引指示的列表项前插入一个新项。格式:格式:InsertItem(String item,Int inde
8、x)其中,item为要插入的列表项,index为索引号。例如,将Computer插入第三项:lb_1.InsertItem(Computer,3)3列表框控件的常用函数(10)SelectItem()函数。格式格式1:SelectItem(String item,Int index)从index处开始查找item,若找到,则选中该项并返回选中项的索引。例如:例如:Int r1r1=lb_1.selectitem(book,1)格式格式2:SelectItem(Int index)选中index项。若index为0,则取消选中该列表框中的选择项。例如:例如:Int r1r1=lb_1.selec
9、titem(3)3列表框控件的常用函数(11)SetState()函数。格式:格式:setstate(Int index,boolean state)设置index项为高亮显示或取消高亮显示。其中,state的值为True时,设置为高亮显示;state的值为False时,设置为取消高亮显示。index=0表示所有项。例如:例如:lb_1.setstate(2,TRUE)/将第二项高亮显示lb_1.setstate(0,FALSE)/取消lb_1中所有项的高亮显示3列表框控件的常用函数(12)FindItem()函数:在项目列表中查找指定索引后面与指定串匹配的列表项。格式格式:FindItem(
10、String text,Int index)函数执行成功时返回第一个匹配项的索引。其中,text为要查找的开头字符串;index是开始查找的列表项的前一个索引。若要查找所有列表项,则将该参数指定为0。例如,从第二项开始查找以boo开头的列表项:Int rr=lb_1.finditem(boo,1)目 录列表框控件编程实例021创建工作空间和应用创建工作空间和应用2创建窗口对象创建窗口对象3布置控件布置控件4为控件编写脚本为控件编写脚本5应用中的应用中的“Open”事件代码事件代码列表框控件编程实例【例8.1】列表框控件的应用。下面以一个在两个列表框之间交换选择数据的完整的例子,说明列表框控件的
11、编程方法。实现的应用程序窗口外观如图8.1所示。列表框控件编程实例1创建工作空间和应用创建工作空间和应用创建一个新的工作空间和应用(exlistbox)。2创建窗口对象创建窗口对象创建一个新的窗口对象“w_listbox”,窗口对象的“Title”为“列表框之间数据交换”,窗口类型为main!。列表框控件编程实例3布置控件布置控件在窗口“w_listbox”中,布置一个静态文本控件“st_1”,其“Text”属性为“选择学生”,采用18号宋体字,选中“Bold”复选框;放置两个列表框控件,左边的为“lb_1”,右边的为“lb_2”,都选中“MultiSelect”复选框和“VScrollBar
12、”复选框,且都不选中“Sorted”复选框,在“lb_1”的“Items”属性页的“Item”列表框中输入一些学生的名字,如“李明”“王红”在两个列表框之间,放置两个命令按钮,上面一个为“cb_toright”,其“Text”为“”;下面一个为“cb_toleft”,其“Text”为“”按钮“cb_toright”,在该按钮控件上单击鼠标右键,选择弹出选单中的“Script”项,进入“Script”子窗口,选择“Clicked”事件,在脚本编辑区中输入以下代码:Int iFOR i=lb_1.totalitems()TO 1 step-1/对列表框lb_1中的每一条记录进行循环IF lb_1.
13、state(i)=1 THEN/判断列表框lb_1中的第i条是否被选中lb_2.additem(lb_1.text(i)/将其加入列表框lb_2中lb_1.deleteitem(i)/在列表框lb_1中将其删除END IFNEXT(2)在“cb_toleft”按钮的“Clicked”事件中输入以下代码:Int iFOR i=lb_2.totalitems()TO 1 step-1 IF lb_2.state(i)=1 THEN lb_1.additem(lb_2.text(i)lb_2.deleteitem(i)END IFNEXT 列表框控件编程实例(3)单击选中列表框“lb_1”,在该控件
14、上单击鼠标右键,选择弹出选单中的“Script”项,进入“Script”子窗口,选择“DoubleClicked”事件,在脚本区中输入以下代码:Int iString sIF this.totalselected()=1 THEN i=this.selectedindex()s=this.selecteditem()lb_2.additem(s)this.deleteitem(i)END IF也可以采用下面这段程序实现与上面相同的功能:IF this.totalselected()=1 THEN lb_2.additem(this.selecteditem()this.deleteitem(t
15、his.selectedindex()END IF列表框控件编程实例(4)在列表框“lb_2”的“DoubleClicked”事件中输入以下代码:Int iString sIF this.totalselected()=1 THEN i=this.selectedindex()s=this.selecteditem()lb_1.additem(s)this.deleteitem(i)END IF也可以采用下面这段程序实现与上面相同的功能:IF this.totalselected()=1 THENlb_1.additem(this.selecteditem()this.deleteitem(t
16、his.selectedindex()END IF列表框控件编程实例5应用中的应用中的“Open”事件代码事件代码在树状区双击应用(exlistbox),在其“Open”事件中输入以下代码:Open(w_listbox)保存所做的工作,运行应用程序。列表视图控件与树状视图控件第8章 高级窗口控件主编:郑阿奇主编:郑阿奇PowerBuilder实用实用教程教程(第(第5版版)目 录列表视图控件011列表视图控件的属性列表视图控件的属性2列表视图控件的常用函数列表视图控件的常用函数3列表视图控件的常用事件列表视图控件的常用事件1列表视图控件的属性“ListView”控件的属性选项卡中有七个选项页,
17、每页的主要功能见表8.2。选 项 页主 要 功 能General设置列表视图的名称、边框、可视性、检索方式等基本属性LargePicture指定大图标的内容,以及设置大图标的尺寸等SmallPicture指定小图标的内容,以及设置小图标的尺寸等State指定状态图标的内容,以及设置状态图标的尺寸等Items设置每个图标对应的说明文本Font设置字体的类型、大小、颜色、修饰等Other设置列表视图控件的尺寸和鼠标光标落在列表视图中时的形状1列表视图控件的属性其中,列表视图控件的“General”页中的一些独特属性及说明见表8.3。属 性说 明FixLocation以大、小图标显示时,用户是否能够
18、拖曳图标,选中时不能拖曳EditLabel是否可以编辑项目的文本标签AutoArrange以大、小图标显示时,是否自动排列项目标签ExtENDedSelect允许用户同时选中多个项目,允许时可以按下【Shift】键后单击鼠标选中连续多项,或按下【Ctrl】键后单击选中不连续的多项,或拉出矩形框选中框内多项ButtonHeader以报告形式显示时,项目使用按钮形式,否则为标签形式DeleteItems允许使用【Delete】键删除“ListView”控件中的项目HideSelection当控件失去焦点时,选中内容不高亮显示LabelWrap当文本标签的文本过长时,自动换行以多行显示,不适用于报告
19、和列表形式ShowHeader显示栏目标题,只适用于报告形式CheckBoxes在图标的左边添加一个选择框,与“State”标签页设置项目状态有关TrackSelect当鼠标光标停留在一个项目上时,该项目就变为高亮状态OneClickActivate在项目上单击鼠标激活该控件对应的事件TwoClickActivate在项目上双击鼠标激活该控件对应的事件GridLines在报告表中添加网格线,只适用于报告形式HeadDragDrop允许拖拉栏目标签,改变栏目顺序,只适用于报告形式FullRowSelect当选中某一个项目时,将整行都选中,只适用于报告形式UnderLineCold使没有选中的文本
20、项目的标签带有下划线,不适用于报告形式UnderLineHot使选中的文本项目的标签带有下划线,不适用于报告形式SortType设置显示项目的排序方式View定义显示形式:Listviewlist!(列表)、Listviewlargeicon!(大图标)、Listviewsmallicon!(小图标)、Listviewreport!(报告)2列表视图控件的常用函数列表视图控件的常用函数见表8.4。与AddLargePicture()和DeleteLargePicture()函数相似的函数还有AddSmallPicture()、DeleteSmallPicture()、AddStatePictu
21、re()、DeleteStatePicture()、DeleteLargePictures()、DeleteSmallPictures()、DeleteStatePictures()等。3列表视图控件的常用事件ListView控件的常用事件见表8.5。其中常用的事件是“DoubleClicked”“ColumnClick”“Clicked”。事 件触 发 条 件BeginDrag在控件上单击鼠标并开始拖拉时触发BeginLabelEdit选择了一个文本标签后,再次单击该标签时触发BeginRightDrag在控件上单击鼠标右键并开始拖动时触发Clicked单击鼠标时触发ColumnClick在
22、报告形式下,单击栏目标题时触发DoubleClicked双击鼠标时触发DeleteAllItems删除所有的项目时触发DeleteItem删除某一个项目时触发DragDrop拖动一个对象到控件上,当松开鼠标放下该对象时触发DragWithIn在一个控件内拖动对象时触发EndLabelEdit结束对文本标签的编辑时触发InsertItem在Listview控件中添加一个项目时触发ItemChanged当Listview控件中的项目发生变化时触发RightClicked单击鼠标右键时触发RightDoubleClicked双击鼠标右键时触发Sort当ListView控件被排序时触发目 录列表视图控
23、件编程实例021列表视图显示文件名列表视图显示文件名2列表视图显示表内容列表视图显示表内容1列表视图显示文件名【例8.2】设计的窗口外观如图8.2所示,左边的列表视图中显示当前目录下的文件名,右边四个按钮用于改变列表视图的显示方式。1列表视图显示文件名实现步骤如下。(1)创建一个新的工作空间和应用(exlistview)。(2)创建一个新的窗口对象“w_listview”。窗口对象的“Title”为“用列表视图显示文件”,窗口类型为main!。(3)在窗口“w_listview”中,布置一个列表视图控件“lv_1”;放置四个命令按钮“cb_1”“cb_4”,其“Text”分别为“大图标”“小图
24、标”“列表”和“视图”;在窗口中放置一个列表控件“lb_1”,将其“Visible”设置为“不可见”,即不选中“Visible”复选框。在项目工作空间目录下放入一些文件,如01.bmp、02.jpg、1.gif等(读者自己找一些文件测试用)。1列表视图显示文件名(4)为对象和控件编写脚本。在窗口中任意位置单击鼠标(不要在控件上),选中窗口,单击鼠标右键,选择弹出选单中的“Script”项,进入“Script”子窗口,选择“Open”事件,在脚本编辑区中输入以下代码:Integer Ilv_1.addcolumn(Title,Left!,800)lv_1.addcolumn(Type,Left!
25、,400)lb_1.dirlist(*,1)FOR i=1 TO lb_1.totalitems()lv_1.additem(lb_1.text(i)+t+mid(lb_1.text(i),pos(lb_1.text(i),.),1)NEXT 单击选中“大图标”按钮“cb_1”,在该按钮控件上单击鼠标右键,选择弹出选单中的“Script”项,进入“Script”子窗口,选择“Clicked”事件,在脚本区编辑中输入以下代码:lv_1.view=listviewlargeicon!用同样的方法,为“小图标”按钮的“Clicked”事件编写脚本:lv_1.view=listviewsmallico
26、n!为“列表”按钮的“Clicked”事件编写脚本:lv_1.view=listviewlist!为“视图”按钮的“Clicked”事件编写脚本:lv_1.view=listviewreport!1列表视图显示文件名(5)在树状区双击应用(exlistview),在其“Open”事件中输入以下代码:Open(w_listview)(6)保存所做工作,运行应用程序。2列表视图显示表内容【例8.3】编写程序,用“ListView”显示“XSCJ”数据库中“XS”表的内容,并提供大、小图标,列表,详细资料等功能。(1)创建工作空间listview.pbw,其“ApplicationObject”为“
27、lvapp”,再创建窗口“w_listview”、数据窗口对象“d_student”。其中,“d_student”对“XSCJ”数据库中“XS”表的全部列进行处理,格式为“Grid”。在“w_listview”上创建列表视图控件“lv_stu”、命令按钮“cb_large”“cb_small”“cb_list”“cb_detail”、数据窗口控件“dw_stu”。为列表视图控件“lv_stu”的picture属性加一些图片。将“cb_large”的标题改为“大图标”,将“cb_small”的标题改为“小图标”,将“cb-_list”的标题改为“列表”,将“cb_detail”的标题改为“详细资
28、料”。将“dw_stu”的“DataObject”属性设为“d_student”,将“dw_stu”的“Visible”属性设为“False”。2列表视图显示表内容(2)编写代码。在窗口“w_listview”的“Open”事件中输入以下代码:SQLCA.DBMS=ODBCSQLCA.AutoCommit=trueSQLCA.DBParm=ConnectString=DSN=XSCJ;UID=dba;PWD=sqlCONNECT;IF sqlca.sqlcode0 THENMessageBox(错误,不能连接数据库!)RETURNEND IFLong iString id,nm,dpInt l
29、mdw_stu.SetTransObject(sqlca)dw_stu.Retrieve()/将表中的数据读取到数据窗口“dw_stu”中lv_stu.AddColumn(学号,center!,500)/给列表视图“lv_stu”创建三个栏目lv_stu.AddColumn(姓名,center!,500)lv_stu.AddColumn(专业名,center!,800)FOR i=1 TO dw_stu.RowCount()/将“dw_stu”中的数据读出,加到“lv_stu”中 id=dw_stu.GetItemString(i,1)/读学号 nm=dw_stu.GetItemString(
30、i,2)/读姓名 dp=dw_stu.GetItemString(i,3)lm=lv_stu.AddItem(id,i)/将学号加到“lv_stu”中,所用的图片号为i lv_stu.SetItem(lm,2,nm)/将姓名加到“lv_stu”中 lv_stu.SetItem(lm,3,dp)/将专业名加到“lv_stu”中NEXT2列表视图显示表内容(3)在“cb_large”的“Clicked”事件中加入以下代码:(4)在“cb_small”的“Clicked”事件中加入以下代码:(5)在“cb_list”的“Clicked”事件中加入以下代码:(6)在“cb_detail”的“Click
31、ed”事件中加入以下代码:(7)在树状区双击应用(lvapp),在其“Open”事件中输入以下代码:lv_stu.view=listviewlargeicon!/以大图标形式显示lv_stu.view=listviewsmallicon!/以小图标形式显示lv_stu.view=listviewlist!/以列表形式显示lv_stu.view=listviewreport!/以报告形式显示(详细资料)Open(w_listview)2列表视图显示表内容运行结果如图8.3所示。目 录树状视图控件031树状视图控件的常用属性树状视图控件的常用属性2树状视图控件的常用事件树状视图控件的常用事件3树状
32、视图的常用函数树状视图的常用函数4树状视图控件编程树状视图控件编程1树状视图控件的常用属性树状视图控件(TreeView)是以树图形式组织项目的,具有直观和易于管理的特点。Windows系统资源管理器的目录(如图8.4所示)就是使用树状视图的典型例子。1树状视图控件的常用属性(1)“HasButtons”属性:指定是否在父节点列表项前显示“+”和“-”按钮,取值为True或False。用户单击“+”按钮时将扩展列表项,单击“-”按钮时将折叠列表项。(3)“Indent”属性:值为Integer类型,指定下层节点(列表项)的缩进宽度,以PBU为单位。可以使用负值,此时节点被缩进到该控件的边界外边
33、。(5)“SortType”属性:取值为枚举类型,指定列表项按标题名排序的方式。有效取值为“Ascending!”“Descending!”“UserDefined!”“Unsorted!”。(2)“HasLines”属性:指定是否用连线将列表项连接起来,取值为True或False。(4)“LinesAtRoot”属性:指定是否使用连线连接所有根节点,取值为True或False。(6)PictureName:String型数组,表示该控件使用的图像文件名。可以在创建树状视图时,通过其“Picture”属性页加入这些图像文件。树状视图控件的常用属性有以下六种。2树状视图控件的常用事件(1)“Se
34、lectionChanged”事件:在用户选择新的选项后触发。该事件是树状视图控件比较常用的事件。(3)“ItemCollapsed”事件:在某个列表项被折叠后触发。(5)“ItemExpanded”事件:在某个列表项被展开后触发。(4)“ItemCollapsing”事件:在某个列表项要被折叠时触发。该事件返回1时阻止折叠,返回0时完成折叠。(2)“SelectionChanging”事件:当用户选择新的选项时触发。该事件返回1时阻止用户改变当前选项,返回0时允许用户改变当前选项。树状视图控件的常用事件有以下九种。2树状视图控件的常用事件(6)“ItemExpanding”事件:在某个列表项
35、要被展开时触发。该事件返回1时阻止展开,返回0时完成展开。(8)“DoubleClicked”事件:双击鼠标时触发。(9)“RightClicked”事件:右击鼠标时触发。(7)“ItemPopulate”事件:当第1次展开某列表项时触发。该事件返回1时阻止展开,返回0时完成展开。3树状视图的常用函数树状视图的常用函数有以下十三种。树状视图的常用函数有以下十三种。(1)AddPicture()函数。格式格式:AddPicture(String picturename)在图像列表中增加图片文件,返回值为新加入的图片文件索引号。(2)CollapseItem()函数。格式格式:CollapseIt
36、em(Long itemhandle)折叠指定的列表项(节点)。其中,itemhandle为要折叠的列表项的句柄(一个长整数,每个节点都有一个唯一代表该节点的句柄)。成功时返回1,失败时返回-1。3树状视图的常用函数(3)ExpandAll()函数。格式格式:ExpandAll(Long itemhandle)展开指定列表项(节点)的所有各级子项(子节点)。itemhandle为要展开各级子项的列表项的句柄。(4)ExpandItem()函数。格式格式:ExpandItem(Long itemhandle)展开指定的列表项(节点)。itemhandle为要展开列表项的句柄。ExpandItem
37、()函数只展开指定的列表项,而不展开该列表项下的各级子列表项。3树状视图的常用函数(5)FindItem()函数。格式格式:FindItem(navigationcode,itemhandle)根据列表项位置返回指定列表项的句柄,失败时返回-1。其中,itemhandle为开始查找的列表项的句柄,Long型;navigationcode为要查找的节点,枚举类型,取值如下。RootTreeItem!:根节点。NextTreeItem!:与itemhandle列表项同一个父节点中同一层的下一个列表项。PreviousTreeItem!:与itemhandle列表项同一个父节点中同一层的前一个列表项
38、。ParentTreeItem!:itemhandle列表项的父节点。ChildTreeItem!:itemhandle节点的第一个子列表项。CurrentTreeItem!:当前所选列表项。例如,得到树状视图控件中当前所选项的句柄:Long tv_curttv_curt=tv_1.FindItem(CurrentTreeItem!,0)例如,如果希望展开树状视图控件中的所有列表项,则以根节点的句柄为参数调用ExpandAll()函数:Long tv_rt/查找根节点的句柄tv_rt=tv_1.FindItem(roottreeitem!,0)/展开所有节点tv_1.ExpandAll(tv_
39、rt)3树状视图的常用函数(6)GetItem()函数。格式:格式:GetItem(itemhandle,item)得到指定句柄的完整列表项。其中,itemhandle为要得到完整信息的列表项的句柄,为Long型;item为TreeViewItem类型的变量,用于保存itemhandle参数指定列表项的完整信息。使用GetItem()函数可以得到指定列表项的完整信息,如标题label、句柄itemhandle、使用的图片索引pictureindex等。3树状视图的常用函数(7)InsertItemLast()函数。格式格式:InsertItemLast(handleparent,label,p
40、ictureindex)在末尾加入新节点。其中,handleparent为指定要插入列表项父节点的句柄;label为新插入列表项的标题,即显示在树状视图控件中的文字;pictureindex为新插入列表项标题前显示的图片的索引号。返回值为Long型。函数执行成功时返回新插入列表项的句柄;发生错误时返回-1。例如,下面的代码在当前列表项后面加入一个列表项“计算机系”,新加入列表项与当前列表项位于同一个层次上(有相同父节点):Long tv_ct,tv_parent/首先求当前列表项的句柄tv_ct=tv_1.FindItem(CurrentTreeItem!,0)/再求当前列表项父节点的句柄tv
41、_parent=tv_1.FindItem(ParentTreeItem!,tv_ct)/加入新列表项tv_1.InsertItemLast(tv_parent,计算机系,2)3树状视图的常用函数(8)InsertItem()函数。格式格式:InsertItem(handleparent,handleafter,label,pictureindex)插入新节点。其中,handleparent指定要插入列表项父节点的句柄;handleafter指定在同一层中句柄为handleafter的项后面插入新项;label为新插入列表项的标题,即显示在树状视图控件中的文字;pictureindex为新插入
42、列表项标题前显示的图片的索引号。返回值为Long型。函数执行成功时返回新插入列表项的句柄,发生错误时返回-1。例如,下面的代码在当前列表项后面插入一个列表项,新插入列表项与当前列表项位于同一个层次上:Long tv_ct,tv_parent/得到当前列表项的句柄tv_ct=tv_1.FindItem(currenttreeitem!,0)/得到当前列表项父列表项的句柄tv_parent=tv_1.FindItem(parenttreeitem!,tv_ct)/插入新列表项tv_1.InsertItem(tv_parent,tv_ct,计算机系,2)3树状视图的常用函数(9)InsertItem
43、First()函数。格式:格式:InsertItemFirst(handleparent,label,pictureindex)插入新节点。其中,handleparent指定要插入列表项父节点的句柄;label为新插入列表项的标题,即显示在树状视图控件中的文字;pictureindex为新插入列表项标题前显示的图片的索引号。返回值为Long型。函数执行成功时返回新插入列表项的句柄,发生错误时返回-1。(10)SelectItem()函数。格式格式:SelectItem(Long itemhandle)选中指定的列表项(高亮显示该列表项),使其成为当前列表项。3树状视图的常用函数(11)SetI
44、tem()函数。格式格式:SetItem(itemhandle,item)设置指定列表项的数据。其中,itemhandle为要设置列表项数据节点的句柄;item为TreeViewItem对象指定新的数据值。例如,要将当前列表节点的标签“计算机系”改为“南京师大计算机系”:Long tv_cttreeviewitem im /得到当前列表项的句柄tv_ct=tv_1.FindItem(currenttreeitem!,0)GetItem(tv_ct,im)Im.label=南京师大计算机系SetItem(tv_ct,im)3树状视图的常用函数(12)Sort()函数。格式:格式:Sort(ite
45、mhandle,sorttype)节点排序。其中,itemhandle指定要对其子列表项排序的列表项的句柄;sorttype指定排序方式,取值为Ascending!、Descending!和UserDefined!。Sort()函数只对指定列表项下面第一层子项进行排序。(13)SortAll()属性。格式:格式:SortAll(itemhandle,sorttype)4树状视图控件编程通常在窗口的“Open”事件中为“TreeView”加上根节点,在“TreeView”控件的“SelectionChanged”事件或其他事件中编写加入子节点的代码。当然也可以在窗口的“Open”事件中生成“Tr
46、eeView”的全部子节点。目 录树状视图控件编程实例04树状视图控件编程实例【例8.4】编写程序,用树状视图显示表“department”中的内容。数据库表“department”的结构如下:no char(10)not null /代码name char(12)null /名称其中,no的编码规则为两位代表学校,四位代表学院,六位代表系科,八位代表年级,十位代表班级。例如:01南京师范大学0101数科院010101 计算机系01010198 九八年级0101019802九八年级二班0101019804九八年级四班010102 应用数学系0102 文学院02河海大学0201 水利学院0202
47、 商学院03东南大学0301 计算机学院0302 商学院树状视图控件编程实例具体步骤如下。具体步骤如下。(1)创建工作空间“treeview.pbw”,其“ApplicationObject”为“tvapp”,再创建一个窗口“w_treeview”、数据窗口对象“d_department”。其中,“d_department”对表“department”的全部列进行处理,格式为“Grid”。在“w_treeview”上创建树状视图控件“tv_depart”、数据窗口控件“dw_depart”。为树状视图控件“tv_depart”的“picture”属性加一些图片。将“dw_depart”的“Da
48、taObject”属性设为“d_department”,将“dw_depart”的“Visible”属性设为“False”。树状视图控件编程实例(2)编写代码。在应用对象“tvapp”的“Open”事件中编写以下代码:sqlca.autocommit=TRUEsqlca.dbms=odbcsqlca.servername=sqlca.dbparm=CONNECTString=DSN=XSCJ;UID=dba;PWD=sqlsqlca.logid=sqlca.logpass=CONNECT;IF sqlca.sqlcode0 THENMessageBox(=错误信息提示=,不能连接数据库!rnr
49、n请检查用户名及口令输入是否正确rnrn电话线或网络连接是否正常,rnrn请询问系统管理员,stopsign!)RETURNEND IFOpen(w_treeview)在窗口“w_treeview”的“Open”事件中输入以下代码:tv_depart.InsertItemLast(0,学校,1)/加入根节点dw_depart.SetTransObject(sqlca)dw_depart.retrieve()/将表“department”的数据读取到数据窗口“dw_depart”中 在“tv_depart”中的“selectionchanged”事件中编写以下代码。统计图控件第8章 高级窗口控件
50、主编:郑阿奇主编:郑阿奇PowerBuilder实用实用教程教程(第(第5版版)目 录统计图控件的结构01统计图控件的结构PowerBuilder用于图形表达的数据有三种,第一种是分类数据(Category Axis),对应于我们熟悉的X轴;第二种是数值数据(Value Axis),对应于我们熟悉的Y轴;第三种是系列数据(Series Axis),对应于我们熟悉的Z轴。PowerBuilder的图形结构如图8.5所示。目 录统计图控件的种类02统计图控件的种类PowerBuilder提供了十七种图形类型。如图8.6所示,可以在“Graph”控件“General”属性页的“GraphType”下