马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?站点注册
×
【其他】
■控件显示样式
ListView控件可以用下面的四种形式显示信息。
大图标方式:每个项目都显示为大图标,图标下面的标签显示一定的文字信息。用户可以在该控件内拖动图标。
小图标方式:项目显示为小图标,并且每个项目的右边都有一个标签。用户也可以在视图内拖动选中的图标。
列表方式:项目显示为小图标,每个图标右边都有一个标签,并且按照一定的顺序以列优先方式显示,显示样式和上面的相同。
报表方式:项目以多栏列表显示,左边的栏显示图标和标签,用户可以根据自己的需要指定任意数量的附加栏并可以设定每个栏内显示的相应数据。
■典型编程
如何使用数据动态构建ListView控件、在不同的显示样式之间切换以及对选中对象进行处理,这是该控件最常用的三种编程情况。下面分别加以介绍。
该控件中显示的数据可以是静态的,在开发时就可以确定;也可以是动态的,需要根据用户的数据改变该控件的显示内容,这种情况更具有普遍性。如何根据用户的数据初始化该控件,这是该控件的一个非常典型的编程。编程思路和开发环境中的设定过程是相似的,也需要首先设定要添加项目的label,data以及要使用图标的索引号。下面是一段典型的编程:
ListViewItem llvi_cust
Int li_numrows,li_index
DataStore lds_cust
SetPointer(HourGlass!)
Lds_cust = Create datasotre
This.DeleteItems() //首先清除ListView中其他的项目
//为报表显示样式创建多个列
This.AddColumn("公司",Left!,700)
This.AddColumn("联系地址",Left!,500)
This.AddColumn("电话",Left!,400)
//检索数据
lds_cust.dataobject = "d_customer"
lds_cust.SetTransObject(SQLCA)
li_numrows = lds_cust.Retrieve()
//如果没有检索到数据则直接返回
If li_numrows <= 0 Then
Destroy lds_cust //释放DataStore对象的内存空间
Return //返回
End If
For li_index = 1 to li_numrows //如果检索到了数据,对数据逐条处理
llvi_cust.label = lds_cust.Object.company_name[li_index] + "~t" + &
lds_cust.Object.address[li_index] + "~t" + &
lds_cust.Object.phone[li_index] //项目标签
llvi_cust.data = lds_cust.Object.id[li_index] //项目的数据
llvi_cust.PictureIndex = 1 //项目的图片
This.AddItem(llvi_cust) //添加该项目
Next
Destroy lds_cust //释放DataStore对象的内存空间
上面的脚本使用DataStore来提取数据,如果检索到数据,就将每条数据添加到ListView控件中,如果没有检索到数据就直接退出。添加项目到ListView时,首先为ListViewItem类型的变量赋值,包括label,data和pictureindex三项,赋值完毕后将该变量的值添加到ListView中。
如何在不同的显示样式之间进行切换?ListView控件的属性View是一个枚举类型的属性,通过修改该属性使其取不同的值可以改变该控件的显示样式。可以使用的取值有:
ListViewSmallIcon! 表示以小图标样式显示。
ListViewLargeIcon! 表示以大图标样式显示。
ListViewList! 表示以列表样式显示。
ListViewReport! 表示以报表样式显示。
比如,可以设置多个命令按钮,不同的按钮被点击时都改变ListView的显示样式。在其中的“报表显示样式”按钮上可以编写如下脚本:
lv_1.View=ListViewReport!
当然,还可以在一个菜单的各个菜单项中编写脚本,当在ListView控件上使用鼠标右键时弹出该菜单。具体方式取决于开发人员的编程风格和用户的具体要求。
如何提取选中项目的内容?实际上显示样式只是一个表面问题,而提取选中项目的内容才是最终的目的。应该首先判断哪个项目选中,然后再读取选中项目的数据。判断项目是否选中可以通过SelectedIndex函数、ListViewItem类型对象的Selected属性等来实现。读取指定项目的数据可以通过ListViewItem类型对象的Label和Data属性来获取。下面是一个最复杂的典型编程,该程序从一个允许同时选中多个项目的ListView控件中读取所有选中项目的标号和数据,脚本如下:
Int li_index
ListViewItem llv_item
For li_index = lv_1.SelectedIndex() To lv_1.TotalItems()
lv_1.GetItem (li_index,llv_item)
If llv_item.Selected Then
MessageBox("提示",String(li_index) + "是选中的~r~n标号:" + &
llv_item.label + "数据:" + String(llv_item.data))
End If
Next
上面的脚本首先定义一个ListViewItem类型的变量,使用GetItem将ListView的项目读取到该变量中,通过判断该变量的Selected来得知项目是否选中。函数SelectedIndex来获取第一个被选中的项目的索引号,循环直到处理完最后一个项目。在其他很多资料上都介绍的使用State函数循环处理多选ListView中的项目,实际上是行不通的。
另外,如果在ListView控件的相关事件中编程,可以直接使用事件的相关参数来获取选中的项目。比如,在DoubleClicked事件中编写脚本,读取用户双击项目的数据,并根据该数据做一定的处理,这也是一种比较常用的典型编程方法。下面是该事件中一段典型的脚本:
ListViewItem llv_item
This.GetItem(index,name)
SetPointer(HourGlass!)
Dw_1.Retrieve(llv_item.Label)
上面的脚本在用户双击选中ListView中的项目时读取该项目的标签,并以该标签作为参数检索其他的数据窗口。
【属性】
ListView属性
▲Visible
布尔类型的变量,表示ListView是否可见。该属性缺省为True。
▲Enabled
布尔类型变量,表示ListView是否可用。该属性缺省为True。
▲FixedLocations
布尔类型变量,表示用户是否可以拖动控件中的项目来改变其位置。该属性缺省为False。
▲EditLabels
布尔类型变量,表示用户是否可以在控件中编辑项目的标签。该属性缺省为False。
▲AutoArrange
布尔类型,表示是否自动排列图标。该属性的缺省值为False。
▲ExtendedSelect
布尔类型,表示用户是否可以选择多个项目。该属性的缺省值为False,是一个非常重要的属性。
▲ButtonHeader
布尔类型,当为True时报表视图中的标题显示为按钮而不是标签,该属性的缺省值为True。
▲DeleteItems
允许用户使用Delete键删除列表中的项目。该属性缺省为False。
▲HideSelection
如果该属性为True,当控件失去焦点时,选中的项目不显示选中状态;如果该属性为False,当控件失去焦点时选中项目仍然显示为选中状态。该属性的缺省值为True。
▲LabelWrap
该属性设置项目的文字是否换行显示还是只在一行显示。该属性的缺省值为True,表示换行显示。
▲Scrolling
该属性表示控件是否可以该动显示其中的项目。缺省为True。
▲ShowHeader
表示标题是否显示在报表视图中。该属性缺省为True。
▲CheckBoxes
表示状态图片是否可以被CheckBox替代。如果设置该属性为True,则CheckBox缺省为非选中状态。该属性缺省为False。
▲TrackSelect
该属性可以指定当鼠标在项目上移动时是否以不同的颜色表示。当该属性设置为True时,鼠标在项目上停留则以不同的颜色表示,当停留一定时间后自动选中该项目。
▲OneClickActivate
表示鼠标单击是否激活ItemActivate事件。当该属性取值为True时,单击鼠标触发ItemActivate事件,并且鼠标位于某项目上时导致项目的颜色改变(效果和TrackSelect相同)并且鼠标的形状为手型。
▲TwoClickActivate
表示鼠标双击是否触发ItemActivate事件。
▲GridLines
指定报表样式时是否显示网格线。该属性缺省为False。
▲HeaderDragDrop
该属性指定在报表样式中列头是否可以拖动来改变列的顺序。该属性缺省为False。
▲FullRowSelect
该属性指定在报表样式中是否选中整行的数据。该属性的缺省值为False。
▲UnderlineCode
当0neClickActive属性为True时,该属性有效。该属性指定没有选中的项目是否显示下划线,为True时表示显示。
▲UnderLineHot
不管0neClickActive还是TwoClickActivate属性为True,该属性都有效。该属性取值为True,表示Hot Tracking有效,并且高亮显示的项目带有下划线。该属性的缺省值为False。
▲Border
该属性指明ListView控件是否有边框,缺省值为True。
▲BorderStyle
枚举类型的属性,可以设定ListView控件的边框类型。当Border属性取值为True时该属性有效。缺省为StyleLower!。该属性的可用值有StyleBox!,StyleLowered!,StyleRaised!和StyleShadowBox!。
▲SortType
枚举类型的属性,缺省值为Unsorted!,表示不进行排序。可以使用的值还有Ascending!(升序),Descending(降序),UserDefined!(用户定义)和Unsorted!(不排序)。
▲View
枚举类型的属性,表示该控件中的项目初始化时的显示样式,缺省值为ListViewLargeIcon!,为大图标显示。可以使用的值有ListViewLargeIcon!(大图标显示样式),ListViewSmallIcon!(小图标显示样式),ListViewList!(列表显示样式)和ListViewReport(报表显示祥式)。
▲Accelerator
为该控件定义快捷键。快捷键允许用户使用键盘选中某个项目,而不是使用鼠标。快捷健在项目标签的第一个字母下面显示下划线表示。
ListViewItem属性
ListView控件的结构比较复杂,使用该数据结构有助于简化对该控件的操作。该数据结构只有少数的函数,大部分时候使用该控件的属性来操作,或者是给该类型的数据赋值后将其插入到ListView控件中。
ListView控件最重要的数据结构ListViewItem,该结构用来保存ListView控件中每个项目的信息。它具有以下属性:
▲CutHighLighted
布尔类型属性,当该属性为True时项目高亮显示,并且是进行剪切操作的目标。
▲Data
any类型的属性,是和项目相关联的数据值。
▲DropHighLighted
布尔类型属性,该属性取值为True表示项目高亮显示,并且是拖放的目标。
▲HasFocus
布尔类型属性,该属性为True时表示项目在当前具有焦点。
▲ItemX
Integer类型的属性,该属性的取值是项目在ListView控件中的X坐标。
▲ItemY
Integer类型的属性,该属性的取值是项目在ListView控件中的Y坐标。
▲Label
String类型的属性,该属性的取值是项目文本标签中的内容。
▲OverlayPictureIndex
Integer类型的属性,其取值是覆盖图像列表中图片的索引号。
▲PictureIndex
Integer类型的属性,它的取值是项目图标的控件图像列表内的索引号。
▲Selected
布尔类型的属性,该属性取值为True时表示该项目是选中的。该属性是一个比较重要的属性,经常用来判断项目是否选中。
▲StatePictureIndex
Integer类型的属性,该属性的取值是控件状态图像列表中的索引号。
【事件】
◆BeginDrag
index
当用户在控件上单击鼠标并开始拖动时触发该事件
◆BeginLabelEdit
index
当用户单击选中的标签时或者调用相应的函数开始编辑标签时触发
◆BeginRightDrag
index
当用户在控件上单击鼠标右键并开始拖动时触发该事件
◆Clicked
index
当用户在控件上点击鼠标左键时触发该事件。当双击鼠标左键时也触发该事件
◆ColumnClick
column
当以报表样式显示并且ButtonHeader属性设置为True时该事件才有可能触发。当用户点击栏目标题时触发
◆Constructor
没有参数
控件创建时触发该事件。通常是在包含该控件的窗口触发窗口的Open事件之前触发该事件
◆DeleteAllItems
没有参数
当所有的项目删除时触发该事件
◆DeleteItem
index
当某一个项目被删除时触发该事件
◆Destructor
没有参数
当控件撤消时触发。通常是在窗口的Close事件触发之后紧跟着触发
◆DoubleClicked
index
当用户双击控件时触发该事件
◆DragDrop
source、index
当用户拖动一个对象到控件上并松开鼠标放下该对象时触发
◆DragEnter
source
当用户拖动其他对象到该控件中时触发
◆DragLeave
source
当用户拖动对象并离开该控件时触发
◆DragWithin
source、index
当用户在控件中拖动对象时触发
◆EndLabelEdit
index、newlabel
当用户编辑完标签时触发
◆GetFocus
没有参数
当控件获得焦点时触发
◆Help
Xpos、Ypos
当控件获得当前焦点并且用户点击了F1键或者用其他方式要获取控件的帮助时触发
◆InsertItem
index
当在控件中插入新的项目时触发
◆ItemActivate
index
当单击或者双击项目时触发。触发时机还取决于控件OneClickActivate和 TwoClickActivate属性的设置
◆ItemChanged
index,focuschanged,hasfocus, selectionchange,selected,otherchange
当控件中的项目改变时触发
◆ItemChanging
没有参数
当项目中的某些内容正处于变化过程中时触发。在该事件中可以返回1来防止改变
◆Key
key, keyflag
当用户点击了一个按钮时触发该事件
◆LoseFocus
没有参数
当控件失去焦点时触发
◆Other
wparam,iparam
当有其他系统信息而没有相应的PB映射消息时触发
◆RightClicked
index
当点击鼠标右键时触发该事件
◆RightDoubleClicked
index
当双击鼠标右键时触发该事件
◆Sort
index1,index2,column
当控件中的项目正在进行排序时触发
【函数】
★AddItem
该函数有两种语法格式,listviewname.AddItem(label, pictureindex),函数的功能是在listviewname中添加一个项目,项目的标签内容为label的内容,项目的图片索引号为pictureindex。另一个语法为:listviewname.AddItem ( item ),作用是将ListViewItem类型的项目添加到listviewname中,ListViewItem类型的变量item可以详细设置其属性的取值,使用这种格式的函数可以更详细地设置要添加项目的内容。
★AddLargePicture
该函数的作用是向ListView控件的大图标显示样式中添加位图、图标或者光标,该函数的语法为dlistviewname.AddLargePicture ( picturename )。
★AddSmallPicture
该函数的作用是向ListView中添加小图标显示样式时的图标、光标或位图,该函数的语法为listviewname.AddSmallPicture ( picturename )。
★AddStatePicture
该函数的作用是向ListView中添加状态图标时的图标、光标或位图。该函数的语法是:controlname.AddStatePicture ( picturename )。
★Arrange
该函数的作用是在显示样式为大图标或者小图标时按行排列图标,函数的语法是listviewname.Arrange ( )。
★DeleteColumn
函数的语法是listviewname.DeleteColumn ( index ),作用是删除索引号为index的列。
★DeleteColumns
该函数的语法是listviewname.DeleteColumns ( ),作用是删除控件中的所有列,相当于对所有列都使用DeleteColumn函数。
★DeleteItem
函数语法是listviewname.DeleteItem ( index ),作用是删除索引号为index的项目。
★DeleteItems
函数的语法是listviewname.DeleteItems ( ),可以删除ListView控件中的所有项目。
★DeleteLargePicture
删除索引号为index的大图标,函数的语法是:listviewname.DeleteLargePicture ( index )。
★DeleteLargePictures
删除所有的大图标。
★DeleteSmallPicture
函数语法是listviewname.DeleteSmallPicture ( index ),删除索引号为index的小图标。
★DeleteSmallPictures
函数的语法是listviewname.DeleteSmallPictures ( ),可以删除控件中的所有小图标。
★DeleteStatePicture
函数的语法是controlname.DeleteStatePicture ( index ),可以删除index指定索引号的状态图标。
★DeleteStatePictures
可以删除控件中所有的状态图标。
★EditLabel
函数语法为listviewname.EditLabel ( index ),作用是将索引号为index的项目的标签置为编辑状态。
★FindItem
函数语法为listviewname.FindItem ( startindex, label, partial, wrap ),函数的作用是在listviewname指定的控件中,从startindex索引号开始查找内容为label的项目,如果找到就返回找到项目的索引号,查找时发生错误则返回-1。可以通过partial与wrap两个参数指定查找选项,partial参数为True时可以进行部分匹配查找,wrap参数为True时搜索完毕后返回到第一个项目。另外,该函数还可以有另外一种格式:listboxname.FindItem ( text, index ),该函数的功能是在索引号为index之前搜索标签内容为text的项目,如果要在所有项目中搜索,可以将index指定为0。
★GetColumn
语法是listviewname.GetColumn ( index, label, alignment,width),功能是获取标号为index的项目的属性,并将标签内容保存在变量label中,将标签文字内容的对齐属性保存在变量alignment中,将列的宽度保存在变量width中。
★GetItem
该函数的语法是listviewname.GetItem ( index, {column}, item ),作用是检索索引号为index的项目的属性,并将这些属性保存到ListViewItem类型的变量view中。 参数column为可选项,指定该参数时可以让该函数只明确检索哪列的属性,如果不指定该参数则检索第一列的属性。
★GetOrigin
函数的语法是listviewname.GetOrigin ( x , y ),可以获取ListView控件左上角的坐标,并将坐标值保存在x和y中。参数x和y都是Integer类型变量。
★InsertColumn
该函数的语法是listviewname.InsertColumn ( index, label, alignment, width ),作用是在index指定的列号之前插入一个新列,新列的标签文本为label变量的内容,它的对齐方式由枚举型变量alignment变量指定,可以使用的值为Center!,Justify!,Left!或者Right!;宽度由width变量指定,其单位为PowerBuilder Unit。注意,在第一个项目之前不能插入项目。
★InsertItem
在ListView控件中插入项目,该函数有两种语法格式。当只插入标签、并且指定图片时可以使用listviewname.InsertItem ( index, label, pictureindex )格式,该函数的作用是在控件中索引号为index的项目之前插入一个项目,新插入的项目的标签内容为label变量的取值,图片的索引号为pictureindex变量的取值。该函数的另一个语法是listviewname.InsertItem ( index, item ),可以为插入的新项目指定更多的属性。函数的作用是在控件中索引号为index的项目之前插入新的项目,新项目的属性取值由item决定。item为ListViewItem类型的变量。同样,该函数的两种语法格式也都不能在第一个项目之前再插入新的项目。
★SelectedIndex
该函数的语法格式是listcontrolname.SelectedIndex ( ),可以返回控件中第一个被选中项目的索引号,如果没有选中项目则返回-1。经常使用该函数和函数TotalSelected及ListViewItem的Selected属性进行循环判断来处理其中所有选中的项目。
★SetColumn
语法为listviewname.SetColumn ( index, label, alignment, width ),作用是在报表样式时设定指定列的属性。将索引号为index的列的标签文本设置为label的内容,对齐方式设置为alignment变量的指定方式,宽度由变量width来指定。
★SetItem
该函数可以设置指定列或者项目的内容。有两种语法格式:listviewname.SetItem ( index, { column }, item )可以为ListView控件中的项目设定更多的属性,这时函数的作用是在控件中设置索引号为index的(并且列号为column)的项目的属性,具体属性的取值由ListViewItem类型的item取值来决定;另外一种语法格式是listviewname.SetItem ( index, column, label ),该函数可以为控件中由index指定的索引号和column指定的列号所确定的项目设定标签文本。
★SetOverlayPicture
该函数用于将一个覆盖图片映射为一个大(或者小)图像列表的索引号。覆盖不是维持一个附加的图像列表,而是映射为控件的主图像列表。函数格式为controlname.SetOverlayPicture ( overlayindex, imageindex ) ,表示为索引号为imageindex的大图标或者小图标的覆盖层图表设置overlayindex。
★Sort
函数语法为listviewname.Sort ( sorttype, { column } ),作用是用指定的列column和指定的排序方法sorttype对项目进行排序。如果没有指定列,则使用第一列进行排序。缺省的排序方法为字典排序,可以使用的排序方法有Ascending!(升序排列),Descending!(降序排列),Unsorted!(不排序)和UserDefinedSort!(用户定义的排序规则)。
★TotalColumns
该函数没有参数,可以返回报表显示样式的ListView控件中的列数。函数的格式是listviewname.TotalColumns ( )。
★TotalItems
该函数返回控件中的项目总数目,返回0表示控件中没有项目。函数的语法是listcontrolname.TotalItems ( )。
★TotalSelected
该函数返回控件中选中项目的数目,没有选中项目时返回0,函数的语法是listcontrolname.TotalSelected ( )。该函数在进行数据处理时经常使用,是一个比较重要的函数。
以上是ListView控件的所有常用的函数。有些函数经常在创建控件时使用,比如AddColumn,AddItem,AddLargePicture,AddSmallPicture,AddStatePicture,InsertColumn和InsertItem等;有些在数据处理时经常使用,比如GetItem,GetColumn,TotalSelected,SetItem和SetColumn等。对这些函数也没有必要全部掌握,只要能够使用适当的函数或者属性编程实现控件的操作即可。
|