程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ Builder初學問與答9

C++ Builder初學問與答9

編輯:C++入門知識

  9.多頁組件

  68)問:我覺得C++Builder的組件模板的管理方式很好,在這個模板中通過單擊頁就可以在各個頁之間進行切換,在C++Builder中我應該怎樣來實現呢?

  答:我們可以用多頁組件來實現,它的好處就是可以在有限的空間中盡量多地存放信息,而且便於把信息分類。就拿組件模板來說吧,在那麼小的屏幕中放置了上百個組件,而且並不顯得凌亂,這都是多頁組件的功勞。

  如果窗體上要放置大量的組件,而且這些組件又是分組使用的,那麼可以考慮使用多頁組件。這樣做可以使窗體更加簡潔明了。多頁組件既有多頁的特性,又是一個容器組件,它就像窗體一樣可以包含其他的組件。

  C++Builder提供了幾種功能相似的多頁組件,它們是:Win32頁中的TabControl,PageControl組件,Win31頁中的TabSet和TabbedNoteBook組件。從它們所在的頁的不同就可以知道,前兩個組件是應用在32位系統中的組件,無論從性能還是風格上來看,這兩個組件都更適合在Windows 95以上的板本中使用。後面兩種組件是為喜愛Windows 3.1風格的用戶保留的,其實我們完全可以只使用前兩種組件。

  69)問:TabControl組件和PageControl組件他們看起來簡直是一模一樣?

  答:初看起來這兩種組件的確差不多,我們可以通過下面的操作可以說明這一點。

  (1)在窗體上放置這兩個組件,通過修改Height和Width屬性把它們的尺寸設置成相同的。

  (2)在對象編輯器中,單擊TabControl的屬性Tabs中的省略號按鈕,這時會彈出一個字符串編輯器。在這個編輯器中分三行輸入第一頁,第二頁和第三頁。然後點擊OK按鈕。

  (3)在窗體中選取PageControl組件,用鼠標右鍵單擊該組件,在彈出的快捷菜單中選擇NewPage命令,PageControl組件將生成一個缺省名為“TabSheetN”的頁,其中N是從1開始的整數。第一次運行New Page命令生成的頁名為TabSheet1,第二次生成的名為TabSheet2,以此類推。我們使用這個命令生成三個頁。

  與TabControl組件不同的是,你可以直接單擊頁來切換頁面。單擊頁在切換頁面的同時也選中了整個PageControl組件。如果要選擇某個頁,可以先單擊頁切換到該頁,然後再單擊頁面就可以了。

  (4)在對象編輯器中,選擇TabSheet1,TabSheet2和TabSheet3的Caption屬性,把它分別修改為第一頁,第二頁和第三頁。

  這樣看起來他們就完全一樣。

  70)問:但要是一樣,為什麼有兩個不同的組件呢,用一個不就行了,好象他們並不真的完全一樣?

  答:你說的對,千萬不要被他們的外表假象所蒙蔽,實際上它們並不一樣。TabControl是一種“假”多頁組件,而PageControl才是“真”多頁組件。

  我們知道多頁組件把所要顯示的信息放在不同的頁中,實際上每個頁都是一個窗體,並可以通過頁來進行頁的切換。TabControl組件雖然有多個頁,但是實際上只有一個頁的模板,也就是說,每次用戶單擊頁時,這個頁都要根據頁模板更新一次,以便對用戶的選擇作出響應。

  很顯然,如果需要在每個頁上顯示不同的組件,那麼TabControl肯定無法勝任這種工作。因為你每次換頁時,必須用代碼更新頁模板,這在C++Builder中實在不是一個好辦法。如果每個頁所顯示的組件相同只是內容有變化,那麼使用TabControl會更加合適,因為它消耗的系統資源比較少。

  而PageControl則是每頁對應一個頁模板。所以,它適宜於每頁都不同的情況。

  71)問:TabControl組件有哪些常用的屬性?

  答:HotTrack屬性用來確定當鼠標指向頁時,頁上的標簽是否自動被加亮顯示。缺省值為False。

  MultiLine屬性用來確定當頁一行顯示不下時是否顯示到下一行。缺省值False表示在一行無法顯示完時,在行的右邊自動出現一個雙向箭頭,可以用來移動頁。

  TabHeight屬性用來設置頁的高度。缺省值0表示頁的高度將自動適應頁上文本的高度。

  TabWidth屬性用來設置頁的寬度。缺省值0表示頁的寬度將自動適應頁上文本的寬度。

  TabPosition屬性為tpTop時,表示將頁放在TabControl組件的上面,為tpBottom時則表示放在下面。

  TabControl組件上的每一個頁都有自己的索引,最左邊的頁的索引為0,緊接著的頁的索引為1,以此類推。TabIndex屬性返回當前被按下的頁。

  Tabs屬性用來設置頁的個數及其標題,在設計時是使用一個字符串編輯器來實現的。

  72)問:TabControl控件有哪些比較重要的事件呢?

  答:TabControl有兩個比較重要的事件OnChange和OnChanging。每當頁被選中後就會發生OnChange事件,這時可以根據屬性TabIndex判斷哪個頁被選中,然後再采取響應的動作。

  OnChanging事件正好發生在頁被選中之前,也就是正好在一個頁切換到另一個頁之前。這個事件使得我們可以在頁切換之前采取某些行動,例如在某些條件沒有設置之前不准離開這一頁。

  其實這兩個事件以前我們已經詳細的研究過,這裡就不再舉例說明了。

  73)問:PageControl組件好像比TabControl組件功能更強大,它是怎樣使用的?

  答:與TabControl相比,PageControl組件的功能確實更加強大,但是卻並不復雜。PageControl中的每一個頁都是一個TTabSheet組件,這個組件實際上是一個容器,你可以在上面放置各種控件。每個TTabSheet組件都有自己的屬性。

  實際上這裡有兩層關系。最頂層的是PageControl組件,它負責管理多個TTabSheet組件,而每個TTabSheet組件也管理著放在它上面的組件。

  74)問:PageControl組件有哪些比較重要的屬性呢?

  答:ActivePage這個屬性顯示當前被選中的頁,它也可以用來切換頁。

  MultiLine屬性用來確定當頁一行顯示不下時是否顯示到下一行。缺省值False表示在一行無法顯示完時,在行的右邊自動出現一個雙向箭頭,可以用來移動頁。缺省值為False。

  TabHeight屬性用來設置頁的高度。缺省值0表示頁的高度將自動適應頁上文本的高度。

  TabWidth屬性用來設置頁的寬度。缺省值0表示頁的寬度將自動適應頁上文本的寬度。

  TabPosition這個屬性的值為tpTop時,頁將放在TabControl組件的上面,而為tpBottom時將顯示在下面。

  此外,還有運行時態屬性:

  Pages這個只讀屬性是PageControl組件上所有的頁組成的數組。

  PageCount這個屬性返回PageControl組件上的頁數。

  75)問: PageControl的每一頁都是一個TTabSheet組件,那TTabSheet有些什麼屬性呢?

  答:TabVisible 這個屬性用來屏蔽某一頁的顯示。也說是說,它的值為False的時候PageControl組件將不顯示這個頁了,但是這個頁還存在,你還可以把這個屬性設置為True來恢復它的顯示。在程序運行期間不能刪除頁,只能屏蔽頁的顯示。

  PageIndex是頁的索引號,

  此外,還有運行時態屬性。

  PageControl屬性返回該頁所在的PageControl組件。

  TabIndex屬性返回該頁在所有可見頁中的索引號。

  因為在程序運行時是不能刪除頁的,所以PageIndex索引號是固定不變的。但是頁可以被屏蔽,當沒有頁被屏蔽時,TabIndex與PageIndex完全相同;當有頁被屏蔽時,TabIndex就與PageIndex就不同了。TabIndex是這一頁在所有可見頁中的索引號,也就是說,第一個可見頁的TabIndex是0,第二個可見頁的TabIndex是1,以此類推。

  76)問:能設計一個例子讓我更好的理解一下它們嗎?

  答:好的 ,首先在TabControl組件的頁面上放置一個編輯框組件。

  然後在PageControl組件的Tab1頁中放置一個編輯框組件。

  接著將PageControl組件切換到Tab2頁,放置一個文本編輯框組件。

  最後,編譯並運行這個程序。

  點擊tabControl組件的tab1到tab3標簽,可以看出,編輯框出現在組件的每一頁中。

  點擊PageControl組件的tab1到tab3標簽,可以看出,每一頁組件都不相同。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved