我正在運行Lazarus 0.9.30.2。TTabSet標籤訂單....在運行時間不同於設計時間
我有一個TPorm,其上有一個TPageControl。在TPageControl中有一系列的TTabSheets。在運行時,TTabSheets的順序與設計時間不同(見圖片)。
在設計時的順序是什麼,我想看看在運行時,至少在第一次顯示形式。爲什麼訂單在運行時會發生變化,並且有辦法控制它?
我正在運行Lazarus 0.9.30.2。TTabSet標籤訂單....在運行時間不同於設計時間
我有一個TPorm,其上有一個TPageControl。在TPageControl中有一系列的TTabSheets。在運行時,TTabSheets的順序與設計時間不同(見圖片)。
在設計時的順序是什麼,我想看看在運行時,至少在第一次顯示形式。爲什麼訂單在運行時會發生變化,並且有辦法控制它?
@TLama是正確的,這與Windows標籤控件在多行視圖中的行爲方式有關。您正在觀察的行爲與多行選項卡處理選擇的方式有關。當您選擇一個標籤時,它總是顯示在最下面一行,因爲用於指示哪個標籤被選中的視覺提示只能用於最下面一行的標籤。
考慮到這個限制,當您修改選定的選項卡時,控件只需重新排列標籤行。這對用戶來說是令人驚訝的混淆。良好的UI設計從來沒有像這樣改變位置的UI元素。
很明顯,這裏發生的情況是,重新排列在運行時首先顯示窗體,並且出於任何原因導致與設計時間安排不同。鑑於用戶可以按照任意順序排列行,只需選擇它們,我不確定您應該擔心行顯示的順序。
如果您在表單首次顯示時強制執行特定排列你可以像這樣的代碼添加到一個OnCreate
處理程序的形式:
PageControl1.ActivePage := TabSheet9;
PageControl1.ActivePage := TabSheet5;
PageControl1.ActivePage := TabSheet1;
針對UI設計的最佳實踐是避免多行標籤控件和我敦促你們嘗試重新設計你的用戶界面的方式。
我有30個TabSheet,因此唯一的選擇是(i)與它一起生活(ii)不使用多線樣式集,並因此使用TPageControl的默認滾動行爲。 – user1174918 2012-03-08 12:55:37
@ user1174918我已經添加了一些代碼來解釋如何至少控制窗體第一次顯示時標籤行出現的順序。但我會尋找替代用戶界面。在我看來,30個標籤似乎太多了。 – 2012-03-08 12:58:44
@ user1174918,我想通過「重新設計」大衛意味着更多的工作,而不是將MultiLine設置爲False。 :-)內容有點不同,使用嵌套的tabcontrols(不是**,**用戶友好),或不是。 – 2012-03-08 14:20:40
我已經添加了Delphi標籤,因爲您也可以在Delphi中看到相同的標籤。看起來更像Windows標籤控件的行爲,就像控件創建時和['TCS_MULTILINE'](http://msdn.microsoft.com/en-us/library/windows/desktop/bb760549%28v=vs .85%29.aspx#TCS_MULTILINE)風格設置,製表符順序丟失。 – TLama 2012-03-08 12:43:03
我見過一些真正奇怪的選項卡控制問題,但這個實際上很容易理解,而且看起來很可行。你有沒有嘗試改變標籤樣式來顯示按鈕?然後它可能不會對它們重新排序。 – 2012-03-08 14:16:00