3

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を与えるような関数はありますか?

4

2 に答える 2

2

実際には、これがあります:

TComboBox.Items.IndexOfObject

上記のコードと同じことをします。

于 2015-10-30T14:04:18.810 に答える
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;
于 2013-02-27T12:01:46.560 に答える