TreeView

【其它】

■TreeView控件能够以树型方式来组织项目。不仅显示直观、界面友好。并且项目的管理和操作更为方便,是当前比較流行的一个控件。

该控件的特点是在较小的空间能够分层次显示大量的数据,而且能够依照用户的要求检索数据。

该控件具有下面功能:

通过能够展开或者折叠的节点遍历数据。

图形化和文本化的节点显示。

拖放操作。

包含剪切、复制和粘贴的节点操作。

■典型编程

通常TreeView控件用来让用户选择数据,或者进行数据的管理。比方。在一个人事管理软件中。使用部门、姓和名这种三层结构查找数据就比較easy。并且能够通过拖拉来进行人事单位的变动。

首先。在窗体打开时创建该控件。

以下的脚本向TreeView控件中首先加入最高级别的项目:

TreeViewItem ltvi_item

ltvi_item.children = True

ltvi_item.SelectedPictureIndex = 1

ltvi_item.Label = "餐饮部"

ltvi_item.Data = "餐饮部"

ltvi_item.PictureIndex = 1

Tv_1.InsertItemLast(0,ltvi_item)

ltvi_item.Label = "接待部"

ltvi_item.Date = "接待部"

ltvi_item.PictureIndex = 2

Tv_1.InsertItemLast(0,ltvi_item)

上面的脚本加入全部一级项目,能够重复使用上面的脚本。直到加入全然部的一级项目。

由于这些一级项目在程序执行之前就能够确定。所以能够直接加入。对于数据可能要发生变动的,应该从数据库中提取数据,通过循环来加入项目。

以下的脚本在用户開始拖动时推断选中项目是否同意拖动。在部门、姓和名三层结构中,仅仅同意拖动最低一层的数据。所以,在BeginDrag事件中编写例如以下脚本:

TreeViewItem ltvi_source

If ltvi_source <> 2 Then //推断用户选中的是否是职工,仅仅能拖动职工

This.Drag(Cancel!)

Else

//保存被拖动项目和其父项目,语句省略

End If

当用户在能够接收拖动数据的项目上时,应该高亮显示该项目,以给用户一定的操作暗示信息。首先推断当前鼠标所在的项目能否够接收拖动的数据,假设能够接收则高亮显示该项目。

在DragWithin事件中编写例如以下脚本:

TreeViewItem ltvi_over

If GetItem(handle,ltvi_over) = -1 Then

SetDropHightLight(0)

Return 0

End If

当用户在能够接收拖动数据的项目上释放鼠标时。应该对项目进行一定的处理。

通常要删除源数据。而且在释放的目标项目中加入该数据。

【属性】

**TreeView属性

▲Visible

布尔类型,表示该控件是否可见。

该属性的缺省值为True。

▲Enabled

布尔类型。表示控件是否可用。该属性的缺省值为True。

▲EditLabels

布尔类型,表示用户能否够编辑控件中项目的标签。缺省值为False。不同意用户编辑标签。

▲HasButtons

布尔类型,表示是否在父项目的左边显示“+”和“-”button来表示是展开还是折叠状态。

该属性的缺省值为True。

▲HasLines

布尔类型。表示在项目之间和父子项目之间是否有线相连。该属性的缺省取值为True。

▲LinesAtRoot

布尔类型,表示是否显示连接全部根项目的线条。该属性的缺省值为False。

▲DeleteItems

布尔类型,表示是否或许用户在控件中使用Deletebutton来删除项目。

该属性的缺省取值为False。

▲DisableDragAndDrop

布尔类型,表示是否禁止用户进行拖拉操作。该属性的缺省值为True,不同意用户进行拖拉操作。

▲HideSelection

布尔类型,表示当TreeView控件失去焦点时选中的内容是否不保持高亮显示。该属性缺省值为True,表示当TreeView控件失去焦点时不高亮显示当中的选中项目。

▲ToolTips

布尔类型,表示是否显示工具栏气泡帮助。该属性的缺省取值为True。

▲CheckBoxes

布尔类型。表示项目左面是否显示复选框。

缺省为False。

▲TrackSelect

布尔类型。表示项目是否进行选择跟踪,也就是当该属性取值为True,鼠标位于某个项目之上时,这项目改变颜色而且在项目以下显示下划线,表示当前项目正准备接收鼠标的操作。该属性的缺省取值为False。

▲FullRowSelect

布尔类型。表示当选中项目时是否整行显示。

该属性的缺省值为False。

▲SingleExpand

布尔类型,表示是否仅仅有一个项目能够展开。当该属性取值为True时,当前选中的项目展开,前面选中的项目自己主动折叠。当该属性取值为False时。能够有多个项目同一时候处于展开状态。

该属性的缺省取值为False。

▲Border

布尔类型,表示该控件是否显示边框。

该属性的缺省取值为True。该属性选中时,边框显示的样式还取决于BorderStyle属性的取值。

▲BorderStyle

枚举类型,表示边框的显示样式。该属性可用的取值有StyleBox!(矩形边框),StyleLowered!(嵌入边框),StyleRaised!(高抬边框)和StyleShadowBox!(阴影矩形边框)。

▲SortType

枚举类型。该属性用来规定控件中项目的排序规则。

可用的取值有Ascending!(按字典顺序升序排列),Descending!(按字典顺序降序排列),UserDefinedSort!(依据用户在sort事件中的脚本进行排序)和Unsorted!(不排序)。

▲Indent

Integer类型。表示以PowerBuilderUnit为单位的子项目的缩进数。该属性的取值能够为负数,可是这样有可能便子项目左移出控件的边界。缺省取值为0。

▲Accelerator

Integer类型。取值为控件快捷链的ASCII码值。该属性保存了控件快捷键相应的ASCII码值。

**TreeViewItem属性

▲Bold

Boolean

项目标签上的文字以粗体显示



▲Childen

Boolean

项目是否拥有子项目。能够使用该属性拥有子项目,以便在以后触发ItemPopulate和ItemExpanding事件



▲CutHighLighted

Boolean

确定项目是否是要剪切的对象



▲Data

Any

用户想和项目关联的数据值



▲DropHighLighted

Boolean

确定项目是不是当前要拖拉的对象



▲Expanded

Boolean

确定项目是否展开



▲ExpandedOnce

Boolean

确定项目是否至少被展开过一次。

当在控件的ItemPopulate事件中加入子项目时该属性非常实用,能够用来推断是否已经加入了子项目



▲HasFocus

Boolean

推断项目是否获得当前焦点



▲ItemHandle

Long

项目的句柄。

一个项目的句柄是惟一的,而且不同项目的句柄也不会有反复



▲Label

Label

项目的文本标签



▲Level

Integer

确定TreeView控件中的项目的层次。根层次的取值为1



▲OverlayPictureIndex

Integer

覆盖图像列表中的图像索引號



▲PictureIndex

Integer

和项目相连的图像在图标列表中的索引號



▲SelectedPictureIndex

Integer

当项目选中时与项目相连的图像在图标列表中的索引號



▲Selected

Boolean

确定项目是否被选中



▲StatePictureIndex

Integer

项目状态图标的索引號

【事件】

◆BeginDrag

handle

当用户在控件上单击鼠标并開始拖动时触发该事件



◆BeginLabelEdit

handle

当文本标签处于编辑状态并開始进行编辑时触发该事件



◆BeginRightDrag

handle

当用户在控件上单击鼠标右键并開始拖动控件时触发该事件



◆Clicked

handle

当用户点击控件时触发



◆Constructor

没有

当控件创建时触发。触发时机应该是包括控件的窗体打开之前



◆DeleteItem

handle

当删除项目时触发



◆Destructor

没有

当控件删除时触发。触发时机应该是在包括控件的窗体关闭时



◆DoubleClicked

handle

当用户双击控件时触发



◆DragDrop

source ,handle

当用户拖动一个对象到控件上而且松开鼠标时触发



◆DragEnter

source

当用户拖动一个其它对象进入控件时触发



◆DragLeave

source

当用户拖动一个其它对象离开控件时触发



◆DragWithin

source,handle

当用户拖动一个其它对象在控件中移动时触发



◆EndLabelEdit

handle,newtext

当用户结束标签的文本编辑时触发



◆GetFocus

没有

控件获得焦点时触发。

触发该事件时控件还没有激活



◆Help

Xpos、Ypos

当用户点击F1button或者其它方式要获取帮助时触发



◆ItemCollapsed

handle

当控件的项目折叠后触发



◆ItemCollapsing

handle

当控件中的项目正在折叠时触发



◆ItemExpanded

handle

当控件的项目展开后触发



◆ItemExpanding

handle

当控件的项目正在展开时触发



◆ItemPopulate

handle

当控件中的项目正在打开其子项目时触发



◆Key

key,keyflag

当用户点击一个button时触发



◆LoseFocus

没有

控件失去焦点时触发。该事件触发时控件还是可用的



◆Other

wparm,lparm

当出现其它没有映射到PB消息上的消息时触发该事件



◆RightClicked

handle

当用户在控件上点击鼠标右键时触发该事件



◆RightDoubleClicked

handle

当用户在控件上双击鼠标右键时触发该事件



◆SelectionChanged

oldhandle,newhandle

某项目被选中时触发



◆SelectionChanging

oldhandle,newhandle

某项目被选中之前触发



◆Sort

handle1,handle2

当控件被排序时每次比較都触发该事件

【函数】

★AddPicture

向TreeView控件中加入图标或者位图。该函数的语法格式为controlname.AddPicture( picturename )。

★AddStatePicture

向TreeView控件的状态图标列表中加入指定的位图或者图标。

该函数的语法是controlname.AddStatePicture ( picturename )。

★DeleteItem

将TreeView控件中指定的项目及其子项目(假设有的话)都删除。函数的语法是treeviewname.DeleteItem ( itemhandle )。当中itemhandle保存的是项目的惟一句柄,在该控件的非常多事件中都有handle这个參数,能够直接使用,也能够使用其它函数首先读取句柄。

★DeletePicture(s)

删除控件中指定索引號的图片。函数格式为controlname.DeletePicture ( index )。函数controlname.DeletePictures( )用来删除控件中全部的图片。

★DeleteStatePicture(s)

删除控件中指定索引號的状态图标,函数的格式是controlname.DeleteStatePicture (index )。函数controlname.DeleteStatePictures ( )用来删除控件中全部的状态图标。

★EditLabel

该函数的语法是treeviewname.EditLabel ( itemhandle ),作用是将句柄为itemhandle的项目的标签置为编辑状态。

★ExpandAll

该函数的语法是treeviewname.ExpandAll ( itemhandle ),作用是将句柄为itemhandle的项目下的全部子项目展开。展开控件中的全部项目,能够对根级项目使用该函数。

★ExpandItem

函数的语法是treeviewname.ExpandItem ( itemhandle ),作用是展开句柄为itemhandle的项目。该函数ExpandItem仅展开指定的项目,而不像ExpandAll那样展开指定项目的全部子项目。

★FindItem

语法是treeviewname.FindItem(navigationcode,itemhandle)。作用是查找和Itemhandle项目的相对位置为navigationcode指定模式的项目。

參数navigationcode是一个枚举型变量。可用的取值例如以下所看到的。

取 值 含 义

RootTreeItem! 查找第一个根级项目,假设控件中还没有加入不论什么项目则返回-1

NextTreeItem! 查找处于同一级别的下一个项目,假设没有下一个项目则返回-1

PreviousTreeItem! 查找处于同一个级别的前一个项目,假设没有前一个项目则返回-1

ParentTreeItem! 查找父项目的句柄。假设是根项目则返回-1

ChildTreeItem! 查找第一个子项目,假设项目是折叠的,则将项目置为打开状态。

假设没有子项目则返回-1

FirstVisibleTreeItem! 查找控件中第一个可视项目,注意滚动栏距顶可视项目的位置

NextVisibleTreeItem! 查找下一个展开项目,假设下一个展开项目在控件的 可视项目的位置

PreviousVisibleTreeItem!查找前一个展开的项目

CurrentTreeItem! 查找当前选中的项目。假设当前没有选中的不论什么项目则返回-1

DropHighLightTreeItem! 查找近期被设置了DropHightLighted属性的项目

灵活运用如上所列的取值。能够非常轻松地遍历TreeView中的全部项目。

★GetItem

函数语法是treeviewname.GetItem ( itemhandle, item),作用是将句柄由參数itemhandle指定的项目的数据检索到TreeViewItem结构的參数item中。

★InsertItem

函数语法是treeviewname.InsertItem(handleparent,handleafter,label,pictureindex ),作用是将标签为label的项目插入到控件中。插入位置在handleparent指定句柄的项目之下作为它的子项目,句柄为handleafter同级项目的后面。该函数还有第二种语法格式是treeviewname.InsertItem
( handleparent, handleafter, item )。作用是将TreeViewitem类型的变量item指定的项目插入到控件的指定位置,另外两个參数的含义和前面全然同样。

★InsertItemFirst

treeviewname.InsertItemFirst (handleparent,label,pictureindex )或者treeviewname.InsertItemFirst ( handleparent, item )都能够。前面一种语法中,插入的项目标签内容由label指定,图标由pictureindex指定。在后面一种语法中。插入项目的属性能够更具体地设定,插入的位置也是由handleparent參数指定。

★InsertItemLast

treeviewname.InsertItemLast(handleparent,label,pictureindex)或者treeviewname.InsertItemLast ( handleparent, item )两种语法格式,都能够将指定的项目插入到由參数handleparent指定的项目下并作为它的最后一个子项目。

插入项目的属性或者由TreeViewItem类型的參数item具体设定。或者由label指定标签、pictureindex指定项目的图标。

★InsertItemSort

treeviewname.InsertItemSort ( handleparent, label, pictureindex )或者treeviewname.InsertItemSort ( handleparent, item )两种语法格式,都能够将指定的项目按一定的排序方式插入到控件中。參数的含义和前面函数中參数的含义同样。

★SelectItem

函数语法treeviewname.SelectItem ( itemhandle ),作用是选中由句柄itemhandle指定的项目。

★SetItem

函数语法treeviewname.SetItem ( itemhandle, item ),作用是用TreeViewItem结构类型的參数item来改动itemhandle句柄指定的项目。

版权声明:本文博主原创文章。博客,未经同意不得转载。

PB控制性能TreeView的更多相关文章

  1. pb传输优化浅谈

    在正式切入今天要谈的优化之前,先碎碎念一些自己过去这几年的经历.很久没有登录过博客园了,今天也是偶然兴起打开上来看一下,翻看了下自己的随笔,最后一篇原创文章发布时间是2015年的4月,今天是2017年 ...

  2. STM32控制永磁同步电机 | FOC电机控制算法概述

    1. FOC基本概念 参考:https://www.sohu.com/a/432103720_120929980 FOC(field-oriented control)为磁场导向控制,又称为矢量控制( ...

  3. asp.net资料! (.NET) (ASP.NET)

    使用SqlBulkCopy类加载其他源数据到SQL表 在数据回发时,维护ASP.NET Tree控件的位置 vagerent的vs2005网站开发技巧 ASP.NET2.0小技巧--内部控件权限的实现 ...

  4. 【MFC】MFC技巧学习 当做字典来查

    MFC技巧学习 摘自:http://www.cnblogs.com/leven20061001/archive/2012/10/17/2728023.html 1."属性页的添加:创建对话框 ...

  5. 自整定模糊PID算法的理论

    模糊控制系统的构成与与常规的反馈控制系统的主要区别在于控制器主要是由模糊化,模糊推理机和精确化三个功能模块和知识库(包括数据库和规则库)构成的.具体实现过程如下所示: (1)预处理: 输入数据往往是通 ...

  6. 罗辑思维首席架构师:Go微服务改造实践

    转自:http://www.infoq.com/cn/news/2018/05/luojisiwei 方圆 曾先后在 Cisco,新浪微博从事基础架构研发工作.十多年一直专注于后端技术的研发,在消息通 ...

  7. Hibernate和IBatis对比

    [转自]http://blog.csdn.net/ya2dan/article/details/7396598 项目也做过几个, 使用IBatis就做一个项目, 基本上都是使用Hibernate, 也 ...

  8. db2 import export load

    DB2中所谓的数据移动,包括: 1. 数据的导入(Import) 2. 数据的导出(Export) 3. 数据的装入(Load) 导入和装入都是利用DB2的相关命令把某种格式的文件中的数据保存到数据库 ...

  9. unity5.0新功能

    原作者 只待苍霞 章节1: 先来两个最关心的新功能, 第一章先讲PBS, 第二章讲光影GI.说到PBS, 首先应该想到的是Unity自带的两个新的Shader, 分别是Standard以及Standa ...

随机推荐

  1. 逆向wireshark学习SSL协议算法(转)

    小贴士:SSL协议的定义 SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整 ...

  2. Python爬虫(一)

    花了四天的时间用python写了个简单的爬虫程序.整个过程分为两个部分:工具的安装和程序的实现 本文并没有讲程序的详细实现遇到的问题,而是对着手前一些前期的准备 第一部分(工具的安装) 开发工具的下载 ...

  3. async And await异步编程活用基础

    原文:async And await异步编程活用基础 好久没写博客了,时隔5个月,奉上一篇精心准备的文章,希望大家能有所收获,对async 和 await 的理解有更深一层的理解. async 和 a ...

  4. 【C语言探索之旅】 第二部分第八课:动态分配

    内容简介 1.课程大纲 2.第二部分第八课: 动态分配 3.第二部分第九课预告: 实战“悬挂小人”游戏 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言 ...

  5. C# - is

     Checks if an object is compatible with a given type. An is expression evaluates to true if the pr ...

  6. poj 2762 Going from u to v or from v to u? (推断它是否是一个薄弱环节图)

    意甲冠军:给定一个有向图有m单向边缘.免费推断是否两点起来(a可以b要么b可以a或最多彼此),该请求 弱联通重量. 算法: 缩点求强连通分量.然后又一次建图.推断新图是否是一条单链,即不能分叉,假设分 ...

  7. POJ9384 迷宫(基金会BFS)

    本文来源于:http://blog.csdn.net/svitter 称号:让你从(0, 0)走到(4,4).而且输出路径. 输入数据:二位数组的迷宫:输出数据:路径: 题解:简单的BFS 注意: 1 ...

  8. JAVA学习 分析Servlet

    一个.什么是Servlet Servlet是一种在server端执行的java编写的程序,是依照Servlet规范编写的一个java类. 二.Servlet的工作过程 如图所看到的:为了实现客户与se ...

  9. UVA 11249 - Game(游戏)

    UVA 11249 - Game 题目链接 题意:两堆石头.a和b.每次能取一堆随意数量,或者两堆同一时候取.可是绝对值差不能超过k,最后不能取的人输,问先手能否赢 思路:先如果(a, b)石子,a是 ...

  10. 华丽的网上突出代码组件CodeMirror

    农民之间的代码懒惰性质:愚公绝不能过夜.一劳永逸永远不知疲倦!这是一个代码示例 动态配置,在不同的场景抽象为常见的配置逻辑加,这使得有可能"为一个全球性的代码.代码做搬运工",更糟 ...