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

如果您的集合对象是 a 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].

于 2010-08-12T14:56:50.130 回答
0

你的TProduit工具(Add)。它还没有实现 ( Get) (或类似的东西)?

您是否继承了此代码?有更详细的吗?

编辑:否则您必须自己创建Get过程,可能通过循环列表并找到匹配项,然后返回它。

于 2010-08-12T14:15:04.790 回答
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 回答