C++ Builder初學問與答4

4.列表類組件


31) 問:當我需要使用多個選項的時候,使用單選按鈕或複選框來進行選擇不是很恰當,因爲在窗體上放置大量的按鈕既不利於佈局的美觀,又會消耗大量的系統資源,C++Builder有什麼解決辦法嗎?
答:可以使用列表框(ListBox、CheckListBox)或組合框(ComboBox)這兩類最常用的列表組件。

32) 問:列表框有那些主要屬性?
答:列表組件ListBox在缺省情況下,只能進行單項選擇,當屬性MultiSelected爲True時,可以進行多項選擇。這時你只要單擊想要的選項,那麼這些選項都會被選中。

Items屬性:列表框中的所有選項都是通過這個屬性來進行訪問的。設置時只要點擊Items右邊的“…”就可以編輯了。
當屬性ExtendedSelect也等於True時,有兩種方法可以進行多項選擇。一種是單擊選項同時按下Ctrl鍵,這樣可以選中兩個選項之間的所有選項。它的缺省值爲False。
Sorted屬性確定列表框中顯示的內容書否按照字母順序排列。缺省值爲False。
當不允許多項選擇時,我們通過屬性ItemIndex就可以返回被選中的選項。但是,如果打開了多項選擇,那麼屬性ItemIndex只返回最後個被選中的選項序號(有些書上也說返回選中選項中具有輸入焦點的選項序號,但我覺得這種說法有點不易讓初學者理解)。
SelCount屬性在MultiSelected屬性爲True時,指出了列表框中被選中項目的個數。當MultiSelected屬性爲False時,它的值爲-1。
Selected屬性指出了列表框中的某個項目是否被選中。
TcheckListBox是從TcustomListBox繼承下來的的,TListBox也是直接從TcustomListBox繼承下來的,因此這兩個組件是兄弟關係,它們的屬性和使用都非常相似。下面來看看它的不同之處:
AllowGrayed屬性和多選按鈕一樣,當屬性值爲True時,則列表框中的選項有三種狀態:選中、未選中和選中但變灰;當屬性值爲False時,列表框只有兩種狀態。缺省值爲false。
Checked其聲明爲:_property bool Checked[int Index];這個屬性用來返回或者設置列表框中的指定選項是否被選中。其中參數Index表示指定的選項的序號。

32) 問:那麼,組合框和列表框相比有什麼相似之處和不一樣的地方呢?
答:首先,從外觀上來說,列表框佔據了比較大的空間,而組合框只需要一行的空間就可以了。從另一方面來說,組合框還帶有一個編輯框,用戶可以直接在編輯框中輸入文本,組合框在一般情況下只顯示這個編輯框,當用戶單擊組合框右邊的下拉箭頭時,就會顯示一個包含所有選項的下拉列表。
組合框和列表框最大的不同是組合框不能進行多項選擇。
組合框與列表框有一定的相似之處,就是它們都能夠包含許多的選項。但是組合框還是有不少獨特的屬性。

33) 問:組合框有哪些常用屬性及事件呢?
答:屬性Style決定着組合框的樣式,C++Builder爲組合框定義了五種不同的樣式。
CsDropDown:這時爲一個標準的組合框,由一個編輯框和下拉列表組成。
CsDropDownList:與標準組合框相似,但不能在編輯框中輸入文本。
CsSimple:沒有下拉列表的組合框,只是一個編輯框,也就是說只能輸入不能選擇。
csOwnerDrawFixed和csOwnerDrawVariable這兩種樣式的組合框常用於需要圖像作爲項目時,當然你輸入字符串也可以。前面一種樣式組合框中各個項目的高度是固定的,而後面一種樣式的高度可以變化,也就是說,各個項目的高度可以不一樣,此外,在這兩種樣式中,編輯框是不可輸入的。
Text屬性用來設置或者返回組合框中顯示出來的文本內容。
當編輯框中的內容發生變化時將觸發OnChange事件。所以在組合框裏我們用的就是它。
注意下面四段兩組語句的區別與聯繫:

//………………第一組
void _fastcall TForm1::ComboBox1Change(TObject *Sender)
{
if(ComboBox1->Text!=””)
Edit1->Font->Size=StrToInt(ComboBox1->Text);
}

上面的代碼還可以寫成下面的樣子,它們的作用是一樣的:

void _fastcall TForm1::ComboBox1Change(TObject *Sender)
{
if(!ComboBox1->Text.IsEmpty())
Edit1->Font->Size= ComboBox1->Text.ToInt();
}

//………………第二組
void _fastcall TForm1::ComboBox2Change(TObject *Sender)
{
Edit1->Font->Name= ComboBox2->Text;
}

也可以用下面的代碼,它們在這裏是等價的:

void _fastcall TForm1::ComboBox2Change(TObject *Sender)
{
Edit1->Font->Name= ComboBox2->Items->String[ComboBox2->ItemIndex];
}
我想通過對比,你會明白這些語句的區別與聯繫的,什麼時候用什麼樣的語句,細細品味一下你就會明白了

34) 問:前面您提到了面板組件,它是一種什麼類型的組件?
答:它是一種容器組件,容器組件是可以包含其他組件的組件,最典型的容器組件就是窗體。其他比較常用的容器組件有面板(Panel)、組合框(GroupBox)。
面板組件可以容納其他組件。任何放置在面板上的組件都會成爲面板的子組件,當你刪除面板組件時,放置在面板上的其他組件也同時被刪除了,這是容器組件的共同特點。

面板組件沒有什麼特別的屬性,只有BevelInner(面板內部斜面),BevelOuter(面板外部斜面),BevelWidth(斜面寬度,單位像素),BorderStyle(邊界風格)和BorderWidth(邊界寬度)幾個屬性有一些特點。這些屬性的任意組合可以生成各種效果的邊框。你可以設置這幾個屬性的值,可以得到不同的面板效果。
其中BevelInner(面板內部斜面),BevelOuter(面板外部斜面)的屬性值是一樣的:bvNone(缺省值)表示沒有斜面;
bvLowered表示爲沉降的斜面;
bvRaised表示爲上升的斜面。
組合框(GroupBox)屬性中你只要設置好Caption就可以了,它是標題的名稱,表示此組合框類別、功能、選項等。GroupBox1爲默認名稱。

5.特殊的輸入控制類組件
35)問:C++Builder有哪些輸入控制類組件?
答:C++Builder輸入控制類組件主要包括滾動條(ScrollBar)、軌跡條(TrackBar)、進程條(ProgressBar)以及加減組件UpDown,它們都可以實現邊續範圍內數值的選擇。

36) 問:滾動條主要用在什麼地方,它又有哪些常用屬性呢?
答:滾動條是常見的組件,它經常出現在列表框、Memo等組件中。這時,它是作爲這些組件的一部分而存在的。其實滾動條還可以單獨使用,單獨使用時,滾動條一般用來控制連續的數值輸入。象調節音量等,都可以使用滾動條輸入。
滾動條有這樣一些常用屬性

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