PB TreeView 屬性,事件詳解(轉)

灰色軌跡發表於2012-07-26

本文轉自:http://chbin95233.blog.163.com/blog/static/32075111201010573448815/

■TreeView控制元件可以以樹型方式來組織專案,不僅顯示直觀、介面友好,而且專案的管理和操作更為方便,是當前比較流行的一個控制元件。
該控制元件的特點是在較小的空間可以分層次顯示大量的資料,並且可以按照使用者的要求檢索資料。該控制元件具有以下功能:
通過可以展開或者摺疊的節點遍歷資料。
圖形化和文字化的節點顯示。
拖放操作。
包括剪下、複製和貼上的節點操作。

■典型程式設計
通常TreeView控制元件用來讓使用者選擇資料,或者進行資料的管理。比如,在一個人事管理軟體中,使用部門、姓和名這樣的三層結構查詢資料就比較容易,而且可以通過拖拉來進行人事單位的變動。
首先,在視窗開啟時建立該控制元件。下面的指令碼向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
布林型別,表示是否在父專案的左邊顯示“+”和“-”按鈕來表示是展開還是摺疊狀態。該屬性的預設值為True。

▲HasLines
布林型別,表示在專案之間和父子專案之間是否有線相連。該屬性的預設取值為True。

▲LinesAtRoot
布林型別,表示是否顯示連線所有根專案的線條,該屬性的預設值為False。

▲DeleteItems
布林型別,表示是否也許使用者在控制元件中使用Delete按鈕來刪除專案。該屬性的預設取值為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
當使用者點選F1按鈕或者其他方式要獲取幫助時觸發

◆ItemCollapsed
handle
當控制元件的專案摺疊後觸發

◆ItemCollapsing
handle
當控制元件中的專案正在摺疊時觸發

◆ItemExpanded
handle
當控制元件的專案展開後觸發

◆ItemExpanding
handle
當控制元件的專案正在展開時觸發

◆ItemPopulate
handle
當控制元件中的專案正在開啟其子專案時觸發

◆Key
key,keyflag
當使用者點選一個按鈕時觸發

◆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控制程式碼指定的專案。

相關文章