PB控件屬性之ListView

ListView

【其他】

■控件顯示樣式
ListView控件可以用下面的四種形式顯示信息。
大圖標方式:每個項目都顯示爲大圖標,圖標下面的標籤顯示一定的文字信息。用戶可以在該控件內拖動圖標。
小圖標方式:項目顯示爲小圖標,並且每個項目的右邊都有一個標籤。用戶也可以在視圖內拖動選中的圖標。
列表方式:項目顯示爲小圖標,每個圖標右邊都有一個標籤,並且按照一定的順序以列優先方式顯示,顯示樣式和上面的相同。
報表方式:項目以多欄列表顯示,左邊的欄顯示圖標和標籤,用戶可以根據自己的需要指定任意數量的附加欄並可以設定每個欄內顯示的相應數據。

■典型編程
如何使用數據動態構建ListView控件、在不同的顯示樣式之間切換以及對選中對象進行處理,這是該控件最常用的三種編程情況。下面分別加以介紹。
該控件中顯示的數據可以是靜態的,在開發時就可以確定;也可以是動態的,需要根據用戶的數據改變該控件的顯示內容,這種情況更具有普遍性。如何根據用戶的數據初始化該控件,這是該控件的一個非常典型的編程。編程思路和開發環境中的設定過程是相似的,也需要首先設定要添加項目的label,data以及要使用圖標的索引號。下面是一段典型的編程:
ListViewItem llvi_cust
Int li_numrows,li_index
DataStore lds_curst
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等。對這些函數也沒有必要全部掌握,只要能夠使用適當的函數或者屬性編程實現控件的操作即可。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章