2009-09-07 33 views
2

我剛發現Delphi TRibbonComboBox沒有物品索引,應該是。如何將ItemIndex添加到TRibbonComboBox?

我想至少在本地解決這個問題,我認爲Delphi 2009增加了一種方法來向外部類引入新的方法,而不必從類下降,但我不記得如何。

有沒有辦法添加'function ItemIndex:integer;'到TRibbonComboBox類,至少在本地單元中不必與原始組件混淆? (或者我在想C#?)

謝謝!

下面是答案/實施,thx梅森!

TRibbonComboBoxHelper = class helper for TRibbonComboBox 
public 
    function GetItemIndex: integer; 
    procedure SetItemIndex(Index : integer); 
    property ItemIndex : integer read GetItemIndex write SetItemIndex; 
end; 

function TRibbonComboBoxHelper.GetItemIndex: integer; 
begin 
    result := Items.IndexOf(Text); 
end; 

procedure TRibbonComboBoxHelper.SetItemIndex(Index: integer); 
begin 
    if (Index >= 0) and (Index < Items.Count) then 
    Text := Items[Index]; 
end; 
+2

值得一提的是,爲什麼TRibbonComboBox沒有可見的itemindex。更重要的是:**也許還有另一種方法來實現你的目標**,這是由已發佈的屬性服務? – Argalatyr 2009-09-07 18:52:04

+1

它確實發生在我身上,我查看了所有已發佈的屬性,並找不到ItemIndex,SelectedItem,SelectedText或類似的東西。它也缺少DropDownStyle,這是一個更大的疏漏。然而,我不想陷入一個有缺陷的設計論點(哎呀,只是):)如果你知道一個更好的方式來從RibbonComboBox中獲取選定的項索引,我很樂意聽到它,thx ! – Zartog 2009-09-07 19:14:57

+0

我的觀點是獲得itemindex是一種策略,而不是實際的目標,即「你實際上想要完成什麼?」這裏沒有必要回答我 - 我只是說在問題中有時候說明你的目標是值得的,這樣我們就可以避免(可能我們不能在這個具體情況下 - 取決於你的目標)避免這些問題。 – Argalatyr 2009-09-07 19:53:10

回答

2

您可以使用一個類幫手,就像這樣:

type 
    TRibbonComboBoxHelper = class helper for TRibbonComboBox 
    public 
    function ItemIndex: integer; 
    end; 

需要注意的是,你不能添加任何新的領域這樣,所以你必須要能夠計算出返回值從TRibbonComboBox公開提供的信息中獲取此功能。