如何在TComboBox中按指定对象查找项目?
我有一个组合框,我在那里存储数据库中的值;将name命名为item,将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?
答案 0 :(得分:2)
实际上,有这样的:
TComboBox.Items.IndexOfObject
它与上面的代码完全相同。
答案 1 :(得分: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;