ListBox組件與ComboBox組件
列表框與組合框組件也被廣泛的使用。列表框表示標准Windows列表框,它提供用戶選的一列選擇表。如果列表框包含更多的項,不能一次顯示,滾動欄提供存取列表框中其余項。
New Term
一些列表框(list boxes)是自繪(Owner-Draw)表框,在自繪列表框中,程序員負責從表框中畫表項。
如果需要,可以自繪列表框,也許沒有人意識到,自繪列表框相當普遍,Delphi中的ToolBar Editor對話框包含兩個列表框,如下圖:
左邊1號表框是普通的列表框,它列出能選擇的可能按鈕組。右邊2號列表框是自繪列表框,它顯示出現在工具欄上的實際按鈕,同時顯示了按鈕的文本描述。
組合框是特殊化的列表框,實際上組合框是列表框與編輯控件的組合。用戶可以從列表中選擇或者在編輯框中輸入一個值。當用戶從下拉列表中選擇項時,該項放到了編輯控件中。有五種不同類型的組合框。組合框的不同類型由Style屬性決定。
組合框類型
- csDropDown——默認值,下拉組合框。用戶可以從列表中選擇一個條目,或在編輯區中輸入新項。這種類型的ComboBox可進行查找,即輸入1個或多個字符並按上下鍵可以選擇與用戶輸入字符最相匹配的條目。
- csSimple——一個不含下拉箭頭的簡單組合框,用戶可以用鍵盤上的上下方向鍵選擇一個條目,或在編輯區域輸入新的條目
- csDropdownList——下拉列表組合框,在這種類型的組合框中,編輯框是“只讀”的,用戶必須選擇一個條目,但也可鍵入條目第一個字母選擇它。例如,鍵入P鍵可選擇所有以P打頭的條目。
- csOwnerDrawFixed——條目不一定是字符串,可以是自繪圖像,在顯示每一項之前,都會觸發OnDrawItem事件。項的高度由ItemHeight屬性指定。
- csOwnerDrawVariable——條目是可以是自繪圖像,高度是可變的。在顯示每一項之前,都會觸發兩個事件。在OnMeasureItem事件響應中,我們可以指定項的高度。在OnDrawItem事件句柄中畫出每一項。
下面我們有一個ComboTst的程序,說明了不同類型的組合框,運行程序實際操作一下感受下它們是怎樣工作的:
ComboTst程序下載:ComboTst.rar
編輯控件的屬性
屬性 | 應用 | 描述 |
Columns | ListBox | 指定在一欄中的條目列數,缺省值為0 |
ExtendedSelection | ListBox | 用戶能否選擇一系列連續的條目,Shift+Click或Ctrl+Click。缺省值為True |
IntegralHeight | ListBox | 是否允許只顯示出條目標題的一部分,如果設為False,那么列表框的高度總是一項高度的整數倍,不會出現顯示不完整的情況。缺省值為False |
ItemHeight | Both | 指定條目標題的高度,缺省值為13 |
Items | Both | 包含所有條目的字符串列表,TStrings實例 |
MaxLength | ComboBox | 指定用戶可以在編輯區輸入的最大字符數,默認為0,表示無限制 |
MultiSelect | ListBox | 用戶能否多選,和ExtendedSelection屬性配合使用 |
Sorted | Both | 指定列表框中的條目是否按字母順序排列 |
Style | Both | 指定列表框的樣式 |
TabWidth | ListBox | 指定列表框中一個制表符所占像素值 |
Text | ComboBox | 用於設置或返回ComboBox上顯示出來的文本,對於csSimple和csDropDown類型的組合框,用戶可以直接修改文字,對於其他類型的組合框,Text是在運行期有效的只讀屬性。 |
運行期屬性
屬性 | 應用 | 描述 |
ItemIndex | ListBox | 返回當前被選擇的條目序號,如果有多個條目被選擇,則返回當前有輸入焦點的條目索引值,如果無選擇項目返回-1,第一項為0 |
SelCount | ListBox | 返回同時被選取的條目數目 |
Selected | ListBox | 用於判斷指定索引號條目是否被選擇 |
SelLength | ComboBox | 返回用戶在編輯區選定的字符數 |
SelStart | ComboBox | 返回用戶在編輯區選定字符的起點序號,從0開始 |
SelText | ComboBox | 返回用戶編輯區中選擇的文本 |
TopIndex | ListBox | 指定顯示在列表框最上方的條目的序號 |
對於以前看到的編輯組件,有極少的ListBox和ComboBox方法。
- Clear方法用於清除控件的所有項。
- ItemAtPos方法返回指定X,Y坐標的列表項。
- SelectAll方法選擇ComboBox中編輯框的文本。
在處理組合框和列表框時最常用的事件就是OnChange與OnClick事件。用這些事件決定在列表框中是否選擇了某一項。
Note
點擊組合框的編輯部分或下拉按鈕不會產生OnClick事件。只有在組合框的列表框部分點擊時才會發生OnClick事件。
- OnChange事件用來檢查組合框的編輯部分的變化,就像用於編輯控件一樣。
- OnDropDown事件用於組合框的下拉按鈕被點擊時檢查。
- OnMeasureItem和OnDrawItem都用於自繪列表框與自繪組合框。