2013-02-27 64 views
3

如何在TComboBox中按指定對象查找項目?如何在Lazarus的TComboBox中按指定對象查找項目?

我有一個組合框,我在那裏存儲數據庫的值;命名爲作爲對象的項目和ID(整數):

ComboBox1.Clear; 

while not SQLQuery1.EOF do  
begin  
    ComboBox1.AddItem(SQLQuery1.FieldByName('NAME').AsString, 
    TObject(SQLQuery1.FieldByName('ID').AsInteger));  
    SQLQuery1.Next;  
end; 

假設,我在組合框的下列項目:

Index Item  Object 
---------------------------- 
    0 'Dan'  0  
    1 'Helmut' 2  
    2 'Gertrud' 8  
    3 'John'  14 

現在,如何找到這樣的組合框項的索引如果我只知道對象的價值?有沒有像GetItemByObject('8')這樣的函數可以給我索引2?

回答

1

沒有這樣的功能,唯一的辦法就是自己做這個。以下代碼通過插入類中的此類函數擴展了組合框類。如果找到對象,則返回該項目的索引,否則爲-1:

type 
    TComboBox = class(StdCtrls.TComboBox) 
    public 
    function GetItemByObject(AnObject: TObject): Integer; 
    end; 

implementation 

{ TComboBox } 

function TComboBox.GetItemByObject(AnObject: TObject): Integer; 
var 
    I: Integer; 
begin 
    Result := -1; 
    for I := 0 to Items.Count - 1 do 
    begin 
    if (Items.Objects[I] = AnObject) then 
    begin 
     Result := I; 
     Exit; 
    end; 
    end; 
end; 

和使用:

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    ShowMessage('Object was found at item: ' + 
    IntToStr(ComboBox1.GetItemByObject(TObject(8)))); 
end; 
+0

很棒:o)謝謝 – user2115046 2013-02-27 13:10:51

+0

不客氣!如果它解決了你的問題,你可能會['考慮接受答案'](http://meta.stackexchange.com/a/5235/179541)。謝謝,歡迎來到StackOverflow :-)! – TLama 2013-03-03 08:27:45

2

其實,有是這樣的:

TComboBox.Items.IndexOfObject

它和上面的代碼一樣。

相關問題