0

オブジェクトのコレクション内のアイテムを名前で検索して取得するにはどうすればよいですか?

    procedure TfoMain.InitForm;
    begin
      // Liste des produits de la pharmacie 1
      FListeDispoProduit := TListeDispoProduit.Create(TProduit);

      with (FListeDispoProduit) do
      begin
        with TProduit(Add) do
        begin
          Name := 'Produit 01';
          CIP := 'A001';
          StockQty := 3;
          AutoRestock := 1;
          QtyMin:= 2;
        end;

        with TProduit(Add) do
        begin
          Name := 'Produit 02';
          CIP := 'A002';
          StockQty := 5;
          AutoRestock := 0;
          QtyMin:= 2;
        end;



 function getProductByName(productName: String): TProduit;
    var
      i : integer;
    begin
      for i := 0 to fProductList.Count -1 do
      begin
        if (TProduit(fProductList.Items[i]).Name = productName)
          Result :=
      end;
    end;

商品名の数量を編集したい。

これどうやってするの?ありがとうございました

4

3 に答える 3

2

コレクション オブジェクトが の場合TCollectionItemsプロパティがあります (ドキュメントまたはソース コードで確認する必要があります)。それとそのCountプロパティを使用して、各アイテムを調べてターゲットと一致するかどうかを確認するループを記述します。

var
  i: Integer;
begin
  for i := 0 to Pred(FListeDespoProduit.Count) do begin
    if TProduit(FListeDespoProduit.Items[i]).Name = productName then begin
      Result := TProduit(FListeDespoProduit.Items[i]);
      exit;
    end;
  end;
  raise EItemNotFound.Create;
end;

Itemsデフォルトのプロパティです。つまり、コードから省略して、配列インデックスのみを使用できます。の代わりにFListeDespoProduit.Items[i]、単に に短縮できますFListeDespoProduit[i]

于 2010-08-12T14:56:50.130 に答える
0
function getProductByName(productName: String): TProduit;
  var
    i : integer;
begin
  for i := 0 to fProductList.Count -1 do
  begin
    if (TProduit(fProductList.Items[i]).Name = productName)
      Result := TProduit(fProductList.Items[i]);    // this???
  end;
end;

次に行くことができます:

MyProduit := getProductByName('banana');
MyProduit.StockQty := 3;

またはあなたが望むものは何でも。

于 2010-08-13T06:21:23.803 に答える
0

あなたのTProduit道具(Add)。Getまだ ( ) (または同様のもの)を実装していませんか?

このコードを継承していますか? 詳細はありますか?

編集:それ以外の場合はGet、おそらくリストをループして一致を見つけてから返すことにより、自分でプロシージャを作成する必要があります。

于 2010-08-12T14:15:04.790 に答える