【问题标题】:delphi 7: How can I find item of object collection?delphi 7:如何找到对象集合的项目?
【发布时间】:2011-03-28 23:15:30
【问题描述】:

如何按名称查找并获取对象集合中的项目?

    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;

我想编辑产品名称的数量。

我该怎么做? 谢谢

【问题讨论】:

  • 您在我写答案时编辑了您的问题,现在看来您已经知道如何识别列表中的项目了。既然你已经知道答案了,那你真正想要的是什么?

标签: delphi tcollection


【解决方案1】:

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

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

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

【讨论】:

  • 以同样的方式解决它。将其分配给 Result 变量,然后“退出”或“中断”。区别在于“exit”退出程序,而“break”只退出“for i := 0 to fProductList.Count-1”循环。
【解决方案2】:

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

Itemsdefault property,这意味着您可以从代码中省略它,而只使用数组索引本身。您可以将其缩短为 FListeDespoProduit[i],而不是 FListeDespoProduit.Items[i]

【讨论】:

    【解决方案3】:
    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;
    

    或任何你想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 2017-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-07
      相关资源
      最近更新 更多