delphi 7: Как мне найти предмет коллекции предметов?

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

    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 ответа

Решение

Если ваш объект коллекции является 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],

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;

Или что угодно.

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

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

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

Другие вопросы по тегам