C++ Builder 初學問答 (九)

來源:互聯網
上載者:User

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標籤,可以看出,每一頁組件都不相同。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.