Delphi 7: Как я могу найти элемент коллекции объектов? - PullRequest
0 голосов
/ 12 августа 2010

как я могу найти по имени и получить Предмет в коллекции объектов?

    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;

Я хочу отредактировать количество в названии продукта.спасибо

Ответы [ 3 ]

2 голосов
/ 12 августа 2010

Если ваш объект коллекции имеет значение TCollection, то у него есть свойство Items (которое вы должны были увидеть в документации или в исходном коде). Используйте его и его свойство 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].

0 голосов
/ 13 августа 2010
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;

или как хотите.

0 голосов
/ 12 августа 2010

Ваш TProduit агрегат (Add). Это уже не реализует (Get) (или что-то подобное)?

Вы наследуете этот код? Есть ли еще детали?

Редактировать: в противном случае вам придется создать процедуру Get самостоятельно, возможно, перебирая список и находя совпадение, а затем возвращая его.

...