




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、VB ListView控件用法集合ListView控件比前面幾種控件要復雜一些,通過此控件,可將項目組成帶有或不帶有列標頭的列,并顯示伴隨的圖標和文本。ListView控件是由ColumnHeader和ListItem對象所組成的,其中ColumnHeader對象的個數決定了控件的列數,而ListItem對象的個數則決定了控件的行數。(圖7)ColumnHeader對象是ListView控件中包含標頭文字的項目。利用ColumnHeader對象,用戶可以:單擊對象觸發ColumnClick事件并根據數據項目將項目排序。拖動對象的右邊框來調整列寬度。在報表視圖中隱藏ColumnHeader對象。
2、ColumnHeader對象的數目決定每個ListItem對象可包含的子項目數目。刪除ColumnHeader對象后所有與列關聯的子項目也將被刪除,并且每個ListItem對象的子項目數組將平移以更新ColumnHeader的索引,而這將導致剩余的列標頭SubItemIndex屬性的改變。ColumnHeader對象的SubItemIndex屬性該屬性返回與ListView控件中ColumnHeader對象關聯的子項目的索引。子項目是字符串數組,代表顯示在報表視圖中的ListItem對象的數據。第一列的列標頭SubItemIndex屬性設置為0,這是因為小圖標和ListItem對象的文字總出現
3、在第一列中,而且它們被當作ListItem對象而不是子項目。列標頭數目取決于子項目數目。列標頭數目總是比子項目數目多1。在設計時可以利用屬性頁的“列首”選項卡將ColumnHeader對象添加到ListView控件中,在運行時則用Add方法添加。ColumnHeader對象的Add方法該方法的使用與前面那些控件基本相似,就不再介紹了。ListView1.ColumnHeader.Add(index,key,text,width,alignment)ListItem對象是指控件中的一行(不包含標頭行)的所有內容。它也可包含文本和圖片,但是要使用圖片則必須通過Icons和SmallIcons屬性引
4、用ImageList控件。ListItem對象的SubItems屬性返回或設置一個字符串(子項目)數組,它代表ListView控件中ListItem對象的數據。ListItem對象可包含任意多個的關聯項目數據字符串(子項目),但每個ListItem對象子項目數目必須相同。每個子項目都對應于相關的列標頭,無法直接向子項目數組添加元素,只有通過ColumnHeaders的Add方法添加列標頭的方法來添加子項目。ListItem對象的Add方法該方法添加ListItem對象到ListView控件的ListItems集合中并返回對新創建對象的引用。它的語法如下:ListItem1.Add(index,
5、key,text,icon,smallIcon)ListView控件的View屬性ListView控件可使用四種不同視圖顯示項目,這可以用View屬性來確定。該屬性返回或設置ListView控件中ListItem對象的外觀。ListView控件的SortOrder,SortKey和Sorted屬性控件中的ListItem對象可以按要求進行排序,與排序有關的屬性是SortOrder,Sorted和SortKey屬性。SortOrder屬性返回或設置一個值,此值決定ListView控件中的ListItem對象以升序或降序排序。SortKey屬性返回或設置一個值,此值決定ListView控件中的Li
6、stItem對象如何排序。Sorted屬性返回或設置確定ListView控件中的ListItem對象是否排序的值。下面的代碼說明了如何創建ColumnHeaders和ListItem對象,SubItemIndex和SubItem屬性的使用方法以及如何排序。Private Sub Form_load()確保ListView控件的view屬性為報表視圖。ListView1.View=lvwReport添加三列。ListView1.ColumnHeaders.Add,Name,姓名ListView1.ColumnHeaders.Add,Sex,性別ListView1.ColumnHeaders.Ad
7、d,Age,年齡向控件添加ListItem對象。Dim itmX As ListItem添加column1的名稱。Set itmX=ListView1.ListItems.Add(1,ZL,張力)使用SubItemIndex將SubItem與正確的ColumnHeader關聯。使用關鍵字(Sex)指定正確的ColumnHeader。itmX.SubItems(ListView1.ColumnHeaders(Sex).SubItemIndex)=男使用ColumnHeader關鍵字將SubItems字符串與正確的ColumnHeader關聯。itmX.SubItems(ListView1.Col
8、umnHeaders(Age).SubItemIndex)=19Set itmX=ListView1.ListItems.Add(1,LF,李芳)itmX.SubItems(ListView1.ColumnHeaders(Sex).SubItemIndex)=男itmX.SubItems(ListView1.ColumnHeaders(Age).SubItemIndex)=22Set itmX=ListView1.ListItems.Add(1,WW,王偉)itmX.SubItems(ListView1.ColumnHeaders(Sex).SubItemIndex)=男itmX.SubIte
9、ms(ListView1.ColumnHeaders(Age).SubItemIndex)=24End SubPrivate Sub ListView1_ColumnClick(ByVal ColumnHeaderAs ComctlLib.ColumnHeader)Select Case ColumnHeader.KeyCase Sex:ListView1.SortKey=1ListView1.SortOrder=lvwAscendingListView1.Sorted=TrueCase Age:ListView1.SortKey=2ListView1.SortOrder=lvwAscendi
10、ngListView1.Sorted=TrueEnd SelectEnd Sub七、帶刻度滑塊-SliderSlider控件是一個包含滑塊和可選擇性刻度標記的窗口,可以通過拖動滑塊,用鼠標單擊滑塊的任意一側或者使用鍵盤移動滑塊來選擇一個值。在選擇離散數值或某個范圍內的一組連續數值時,Slider控件十分有用。例如,無需鍵入數字,通過將滑塊移動到刻度標記處,可以用Slider控件來輸入數值。Silder控件的大多數基本屬性比較簡單,我們這里重點介紹一些較有用而又常易忽略的屬性。TickStyle屬性該屬性返回或設置Slider控件上顯示的刻度標記的樣式。SelectRange,SelStart和
11、SelLength屬性Slider控件可以選擇某個范圍內的數值,這就要用到SelectRange,SelStart和SelLength屬性。SelectRange屬性決定Slider控件是否可以選擇一個范圍。如果SelectRange屬性為True,SelStart為選定范圍的起始值,SelLength為選定范圍的長度。如果SelectRange屬性為False,則SelStart屬性的設置值與#118alue屬性的設置值相同,SelLength屬性無效。下列代碼允許在按住SHIFT鍵時,用鼠標拖動或單擊Slider控件以選擇一個范圍。Private Sub Form_Load()設置slid
12、er控件的設置值Slider1.Max=20End SubPrivate Sub Slider1_MouseDown(Button As Integer,Shift As Integer,x As Single,y As Single)If Shift=1 Then 如果按住Shift鍵,則Slider1.SelectRange=True 打開SelectRange。Slider1.SelStart=Slider1.#118alue設置SelStart數值Slider1.SelLength=0設置先前的SelLength(如存在)為0。End IfEnd SubPrivate Sub Slid
13、er1_MouseUp(Button As Integer,Shift As Integer,x As Single,y As Single)if Shift=1 Then如果在一點決定返回上一步,將發生錯誤。On Error Resume Next否則使用SelStart和當前數值設置SelLength。Slider1.SelLength=Slider1.#118alue-Slider1.SelStartElseSlider1.SelectRange=False如果松開SHIFT鍵。End IfEnd Sub在程序中,常用Slider控件來代替鍵盤輸入數字,如下面的例子。該例通過Slider
14、控件來顯示不同的長度。Private Sub Form_Load()Slider1.Min=0Slider1.Max=50Slider1.SmallChange=1Slider1.LargeChange=10Slider1.TickFrequency=5End SubPrivate Sub Slider1_Change()Label1.Caption=長度是&Format(Slider1.#118alue/5,#.00)&厘米End Sub=一、ListView使用簡介ListView控件是VB開發者非常喜愛的控件之一。作 為Windows95公共控件組(COMCTL32.OCX)的成員,它經
15、常與經常與TreeView、ImageList等控 件聯合使用。即用TreeView顯示一個的樹型結構,而用ListView顯示選中的節點(Node)對 象的記錄集。這是筆者在開發財務軟件項目中的 模塊的一個用戶界面。屏幕左邊是一個TreeView控件,用來顯示會計憑證的類別;右邊是一 個ListView,用來顯示對應類別的憑證目錄;上方是一個菜單條控件(MenuBar)和一個工具 條控件(ToolBar);下方是一個狀態欄控件(StatusBar),用來顯示憑證數個當前日期。大家可以看到圖中所示的界面非常類似于Window95/98 的資源瀏覽器,Windows的界面風格做為一種標準已為廣大
16、用戶所接受。而Windows操作系 統的主要的優點就是為所有的應用程序提供了公用的界面。知道如何使用基于Windows的 應用程序的用戶,很容易學會使用其他應用程序。這種使用Windows95公共控件組合的方法能夠達 到與Windows界面的一致性,所以在目前VB5.0應用程序的開發中經常使用。二、填充大量結果集所遇到的問題在實際應用開發中,經常用ListView填充一個數據庫 結果集(Record set)的內容。即先寫一段SQL查詢語句,產生一個結果集,然后將結果集的每一 條記錄用DO.LOOP循環語句中填到ListView中。但是當結果集很大時(例如有5000條以上的記錄) ,填充所需要
17、的時間會很長。用戶不得不等很長時間完成一個查詢。所以在查詢的過程中 必須允許用戶按Escape鍵退出。具體做法是在DO.LOOP循環體中加一條DoEvents函數,并 寫一段中斷退出程序代碼。DoEvents函數的功能是:轉讓控制權,以便讓操 作系統處理其它的事件。這樣在長時間的查詢過程中,如果用戶按了Escape鍵,將退出循環 體,結束查詢過程。但是這樣又會引發另外一個問題:由于DoEvents 可以讓操作系統響應別的事件,循環體中填充每一條ListView項目(ListItem)的過程也會 顯示出來,所以在填充的過程中屏幕會不停的閃動,這種現象當然不能被用戶所接受。如何 解決這個問題呢?三
18、、解決方案用WindowsAPI函數可以解決這個問題。首先對幾個 用到的API函數做一解釋和說明。1.GetClientRect Lib user32 (ByVal hwnd As Long, lpRect As RECT) As Long此函數的功能是獲得一個指定對象窗口(Window) 的矩型框區域(rectangle)。Hwnd為指定對象或窗體的句柄。LpRect為返回矩 型框的結構(必須定義為結構類型的變量)。2.ValidateRect Lib user32 (ByVal hwnd As Long, lpRect As RECT) As Long此函數的功能是使指定的矩型區域生效。這
19、樣會 通知Windows不必對指定的區域進行重畫(Redraw)。3.InvalidateRect Lib user32 (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) As Long此函數的功能是使指定的矩型區域無效。這樣會 通知Windows要對指定的區域進行重畫。具體實現的步驟如下:1.在填充結果集之前先用GetClientRect函數獲 得ListView的顯示區域。2.在增加完一個顯示項目(ListItem)后用ValidateRect 函數置這一區域為有效。這樣Windows就不會顯示每一條ListItem,屏幕
20、閃動的現象就會消 失。3.在填充結果集之后,用InvalidateRect函數置 這一區域為無效。這樣Windows就會重畫ListView的內容,結果集被完整的顯示出來。下面是筆者在項目開發中的一個程序實例。程序 名為FillListView。該程序將填寫一個Access數據庫(FISCAL.MDB)的憑證表(Table)的內 容到ListView中。首先進入VB5.0,新建一個窗體(Form),名為Form1。然后在Form中增加下列控件。控 件 名 NameListView LvwImagelist imlListCommand Button。 Command1將ImageList控件中
21、充填一個名為“item”的圖象后 與ListView控件關聯。在菜單命令條中進入“引用”對話框,選 擇“MicrosoftDAOObjectLibrary”在Form的通用模塊(Modle)中定義以下變量。Private Type RECT 用 來 定 義 一 個 區 域 的 坐 標。Left As LongTop As LongRight As LongBottom As LongEnd Type - - Windows API 函 數 的 聲 明。Private Declare Function InvalidateRect Lib user32(ByVal hwnd As Long, l
22、pRect As RECT, ByVal bErase As Long) As LongPrivate Declare Function ValidateRect Lib user32(ByVal hwnd As Long, lpRect As RECT) As LongPrivate Declare Function GetClientRect Lib user32(ByVal hwnd As Long, lpRect As RECT) As LongDim mbSearchCancel As Boolean 用 來 定 義 查 詢 中 斷 的 標 志。 True 表 示 中 止 查 詢;F
23、alse 表 示 正 在 查 詢。 將 該Form 的KeyPreview 屬 性 設 為True, 以 控 制 窗 體 接 收 鍵 盤 事 件。 然 后 在Form 的KeyPress 事 件 中 寫 下 列 代 碼:If KeyAscii = vbKeyEscape ThenmbSearchCancel = True 當 用 戶 按Escape 鍵 時, 置mbSearchCancel 變 量 為True。End If 表 示 結 束 查 詢。在Command Button 的 Click 事 件 中 調 用 填 充 子 程 序:Call FillListView。子 程 序 的 代 碼
24、為:Private Sub FillListView()Dim itmX As ListItem 定 義 一 個ListView 的 顯 示 項 目。Dim sSQL As String 查 詢 字 串 變 量 。Dim rc As RECT ListView 的 顯 示 區 域。Dim wrkJet As Workspace 數 據 庫 工 作 空 間。Dim dbFISCAL As Database 數 據 庫 對 象。Dim RS As Recordset 數 據 結 果 集。On Error GoTo ErrFillListViewScreen.MousePointer = vbHou
25、rglasslvw.ListItems.Clear: 清 除ListView 的 內 容。 定 義ListView 的 列 頭 的 名 稱。With lvw.ColumnHeaders.Add , , 憑 證 編 號, 800.Add , , 憑 證 日 期, 1000.Add , , 憑 證 字 號, 1000.Add , , 憑 證 類 別, 800.Add , , 首 行 摘 要, 1440.Add , , 借 方 金 額 合 計, 1000, lvwColumnRightEnd With - - - 產 生 查 詢 語 句。sSQL = select voucher_id,vouche
26、r_number,voucher_date,voucher_type_shortname,sSQL=sSQL&voucher_type_name,voucher_memo,voucher_amount from VOUCHERsSQL = sSQL & order by voucher_number - - - 打 開 一 個 數 據 庫 結 果 集。Set wrkJet = CreateWorkspace(NewJetWorkspace, admin, , dbUseJet)Set dbFISCAL = wrkJet.OpenDatabase(FISCAL.mdb)Set RS=. dbFI
27、SCAL .Open sSQL,dbOpenForwardOnly 獲 得listview 的 顯 示 區 域。Call GetClientRect(lvw.hwnd, rc)Do While Not RS.EOF()DoEventsIf mbSearchCancel Then 中 斷 退 出RS.Close: Set RS = Nothing 關 閉、 清 除 結 果 集。mbSearchCancel = FalseScreen.MousePointer = vbDefault - - 刷 新ListView 的 內 容, 顯 示 已 經 查 出 的 記 錄 數。Call InvalidateRect(lvw.hwnd, rc, True)Exit SubEnd If - - - 增 加 一 個 顯 示 項 目ListItem。With lvw.ListItemsSet itmX = .Add(, , & RS!voucher_number, item, item) 憑 證 編 號itmX.SubItems(1) = Format$( & RS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計量力學試題及答案
- 太原人力資源師考試試題及答案
- 勞務企業勞務費結算、支付和工資支付情況報
- 臥床癱瘓病人康復護理
- 2025年中國攀爬網行業市場全景分析及前景機遇研判報告
- 2025年中國女性衛生品行業市場全景分析及前景機遇研判報告
- 2025年中國捏褶窗簾行業市場全景分析及前景機遇研判報告
- 護理學基礎心肺復蘇說課
- 煤炭塌陷區景觀優化設計
- 腫瘤化學治療患者護理
- 2022火電廠鐵路專用線安全管理標準
- 《2025年煤礦開工第一課培訓》專題講座
- 食品檢驗員持證上崗培訓課件
- 2025年中國速凍水餃行業供需態勢、競爭格局及投資前景分析報告(智研咨詢)
- 臨床教學師資培訓
- 弱電工程項目經理職責
- 青馬工程培訓班培訓課件
- 雙碳知識培訓
- 新交際英語(2024新版)一年級上冊Unit 1~6全冊教案
- 醫療保險基金使用監督管理條例
- 2025年慢性阻塞性肺疾病全球創議GOLD指南修訂解讀課件
評論
0/150
提交評論