TStringList 的 addObject 方法

2024-03-28

我想知道这个方法调用的作用:

stringList.addObject(String,Object);

我也想知道这个属性是做什么的:

stringList.Objects[i]

添加时看起来像键、值对。但是在循环检索时检索到了什么?

我还看到 items[i] 调用。

我对 TStringList 操作和 TList 操作感到困惑。


它添加了一对项目:TStringList.Strings列表和匹配的TObject in the TStringList.Objects list.

例如,这允许您存储提供项目名称的字符串列表,以及包含匹配项目的类的对象。

type
  TPerson=class
    FFirstName, FLastName: string;
    FDOB: TDateTime;
    FID: Integer;
  private
    function GetDOBAsString: string;
    function GetFullName: string;
  published
    property FirstName: string read FFirstName write FFirstName;
    property LastName: string read FLastName write FLastName;
    property DOB: TDateTime read FDOB write FDOB;
    property DOBString: string read GetDOBAsString;
    property FullName: string read GetFullName;
    property ID: Integer read FID write FID;
  end;

implementation

{TPerson}
function TPerson.GetDOBAsString: string;
begin
  Result := 'Unknown';
  if FDOB <> 0 then
    Result := DateToStr(FDOB);
end;

function TPerson.GetFullName: string;
begin
  Result := FFirstName + ' ' + FLastName; // Or FLastName + ', ' + FFirstName
end;

var
  PersonList: TStringList;
  Person: TPerson;
  i: Integer;
begin
  PersonList := TStringList.Create;
  try
    for i := 0 to 9 do
    begin
      Person := TPerson.Create;
      Person.FirstName := 'John';
      Person.LastName := Format('Smith-%d', [i]); // Obviously, 'Smith-1' isn't a common last name.
      Person.DOB := Date() - RandRange(1500, 3000);  // Make up a date of birth
      Person.ID := i;
      PersonList.AddObject(Person.LastName, Person);
    end;

    // Find 'Smith-06'
    i := PersonList.IndexOf('Smith-06');
    if i > -1 then
    begin
      Person := TPerson(PersonList.Objects[i]);
      ShowMessage(Format('Full Name: %s, ID: %d, DOB: %s',
                         [Person.FullName, Person.ID, Person.DOBString]));
    end;
  finally
    for i := 0 to PersonList.Count - 1 do
      PersonList.Objects[i].Free;
    PersonList.Free;
  end;

这显然是一个人为的示例,因为它并不是您真正有用的东西。不过,它演示了这个概念。

另一个方便的用途是与字符串一起存储整数值(例如,显示列表中的项目)TComboBox or TListBox以及用于数据库查询的相应 ID)。在这种情况下,您只需在中对整数(或任何其他 SizeOf(Pointer))进行类型转换Objects array.

// Assuming LBox is a TListBox on a form:
while not QryItems.Eof do
begin
  LBox.Items.AddObject(QryItem.Fields[0].AsString, TObject(QryItem.Fields[1[.AsInteger));
  QryItems.Next;
end;

// User makes selection from LBox
i := LBox.ItemIndex;
if i > -1 then
begin
  ID := Integer(LBox.Items.Objects[i]);
  QryDetails.ParamByName('ItemID').AsInteger := ID;
  // Open query and get info.
end;

存放实际物品以外的物品时TObject,您不需要释放内容。由于它们不是真实的对象,因此除了TStringList itself.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TStringList 的 addObject 方法 的相关文章

  • Delphi:设置 TByteDynArray 长度的问题

    问题已结束 答案已接受 替换为Delphi 7 访问冲突 TByteDynArray 问题 https stackoverflow com questions 3157732 delphi 7 access violation tbyted
  • 带有子列表的通用记录 TList?

    我想在 Delphi XE5 中使用带有子列表的通用记录 TList type TMyRecord record Value1 Real SubList TList
  • 德尔福XE5安卓。硬件后退按钮按下

    如何模拟硬件后退按钮按下来关闭应用程序 我需要通过代码关闭应用程序 但 Application Terminate Close Hide 和 DisposeOf 不起作用 所以我想到模拟硬件后退按钮按下来实现我的目标 IFDEF ANDRO
  • Delphi 有通用的“对象池”实现吗?

    我在寻找 Delphi 的数据库连接池实现时遇到了这个问题 对象池需要两个方法 get 从池中获取一个对象 如果池为空或者其大小尚未达到最大大小 这将创建一个新实例 此方法必须是线程安全的 以便两个线程不能同时获取一个对象同一时间 如果所有
  • Delphi预定义环境变量

    谁能告诉我在哪里可以找到 RAD Studio 中可用的 伪 环境变量列表 例如 Platform Config 等 具体来说 我想要一个能够为我提供 RTL 版本的版本 以便我可以将编译单元 dcu 放入正确的目录中 即 XE为D15 X
  • 如何发送/接收 JSON?

    我知道这是一个愚蠢的问题 但我通常不进行 Web 编程 并且被要求发送一些 JSON 数据并接收一些回报 我用谷歌搜索 很清楚如何编码和解码 JSON 数据 但我对此很陌生 我不知道如何与给定的 URL 进行通信并说 这里有一些数据 请发回
  • 是否可以确定 dbEdit 中的文本是否比可见文本长?

    在某些表单上 我的 dbEdits 有时不够宽 无法显示其字段可能包含的所有文本 对于他们我有以下代码 procedure Tgm12edLots dbeLotNameMouseEnter Sender TObject begin with
  • 如何在 Delphi 中更改 TabControl 中活动 TAB 的颜色

    如何更改 TabControl 在 FireMonkey 上 中活动 TAB 的颜色 如下所示 有两种方法可以实现这一点 1 第一个选项是您可以创建定制风格 for 选项卡控件 from T样本 风格设计师 然后您可以添加您想要在自定义设计
  • Delphi XE2 中的 TDataModule.ClassGroup 伪属性到底有什么作用?

    我尝试将一个组件从一个数据模块复制并粘贴到 Delphi XE2 中的另一个数据模块中 该组件是一个 Fast Report 数据源链接组件 数据模块是全新的 刚刚在 XE2 中创建 其他人也遇到了同样的问题并报告了质量中心为106369
  • Delphi 窗体在显示时总是会触发 OnResize 吗?

    如果我创建一个新的 Delphi 表单 挂钩其 OnResize 事件并运行该应用程序 则在显示窗口之前会触发 OnResize 我不知道对于任何窗口来说 这种情况是否总是会发生 对于熟悉 Windows API 的人来说 我已将其追溯到
  • 可以在delphi数据集中创建一个假数据字段吗?

    我想在 DataSet 不是 ClientDataSet 中创建一个 假 数据字段 该字段不应存储在数据库中 它不是计算字段 应允许用户输入输入数据 该字段具有业务逻辑含义 因此用户更新其值后应该更新其他字段 使用 OnFieldChang
  • 作为属性的类引用

    谷歌对于这类搜索毫无用处 因为你会得到数亿个结果 其中没有一个与特定问题相关 问题很简单 Delphi 中是否可以有类引用属性 如果是这样 怎么办 这是我尝试过的 type TMyObject class end TMyObjectClas
  • delphi中生成随机数

    我想在delphi中创建一个随机数并将其分配给文件作为文件名 我设法做到了这一点 但是当我单击按钮生成数字时 它总是以 0 开头 知道如何修复它 procedure TForm1 Button1Click Sender TObject va
  • DELPHI win32 的 ORM [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道 Delphi Win32 的 ORM 或类似的东西吗 Marco Cantu 是 Insta
  • 在主表单之前显示登录表单

    我在表单之间导航时遇到问题 我使用 Delphi XE5 创建了一个 Android Firemonkey 移动应用程序 我目前有一个登录表单和主表单 现在我想要有关如何处理登录表单以显示在主表单之前的建议 在 项目选项 中的表单下 选择要
  • iOS Objective-C 对象:何时使用release,何时不使用它

    我在 iOS 下 正在使用 delphi Tokyo 进行开发 这是我的代码 aUIImage TUIImage Wrap TUIImage alloc initWithCGImage aCGImageRef try aData TNSDa
  • EIdOSSLUnderlyingCryptoError 和“使用 SSL 连接时出错。错误:14094410...”

    我在 OS X 上的 Delphi 10 1 Berlin 中遇到 Indy 组件问题 我正在使用TIdHTTP使用 HTTPS 连接到 Web 服务 问题是从 OS X 客户端连接到服务器 在 OS X 上运行时 我总是遇到同样的错误 P
  • 如何使用用户输入来寻址 Pascal 中的特定变量(Eval/Exec?)

    我正在尝试在分形程序中做一些非常具体的事情隆起7X http apophysis 7x org 使用的脚本语言是Pascal 该项目是用德尔福写的 https svn code sf net p apophysis7x svn trunk
  • Delphi - 相当于C#的三元运算符? [复制]

    这个问题在这里已经有答案了 可能的重复 Delphi 中是否存在或者将来是否存在条件运算符 https stackoverflow com questions 2108609 is there or is there ever going
  • Delphi - 将物理路径(设备文件句柄)转换为虚拟路径

    我怎样才能转换像这样的路径 设备 HarddiskVolume3 Windows 进入其相应的虚拟路径 如本例中的 c Windows 我个人更喜欢原生方式 function GetHDDDevicesWithDOSPath TString

随机推荐

  • Vulkan 管道顶部/底部和 ALL_COMMANDS

    作为很多 初学者 我认为使用 TOP OF PIPELINE 作为 dst 和 BOTTOM OF PIPELINE 作为 src 意味着两者的 ALL COMMANDS Here https github com KhronosGroup
  • Grails 2.0 中带有新 where 查询的参数

    在 Grails 2 0 中定义 where 查询时是否可以使用参数 例如 def query Book where id it Book sub query find 5 我尝试运行该代码 但它在调用 find 时抛出 MissingMe
  • 创建一个包含比原始元素更多元素的 ReactiveUI 派生集合

    是否可以创建一个 ReactiveUI 派生集合 其中包含比原始集合更多的元素 我已经看到有一种方法可以过滤集合并选择单个属性 但我正在寻找相当于可枚举的 SelectMany 操作 为了说明这一点 想象一下尝试获取代表每个陷入交通拥堵的乘
  • 避免 printf() 中的尾随零

    我一直在发现 printf 系列函数的格式说明符 我想要的是能够打印小数点后最大给定位数的双精度 或浮点数 如果我使用 printf 1 3f 359 01335 printf 1 3f 359 00999 I get 359 013 35
  • C# 中图片框的图像之间的转换[重复]

    这个问题在这里已经有答案了 可能的重复 Windows 窗体图片框中的图像转换 https stackoverflow com questions 3270919 transition of images in windows forms
  • 当数据回发时,MVC 如何填充模型

    MVC对于如何将数据发送到浏览器非常清楚 您访问一个 URL 它运行代码来创建模型 将该类型化模型传递到视图中 然后视图根据模型的状态呈现 HTML 然而 我发现不太清楚的是 当用户在页面上提交表单时 MVC 如何将该表单映射回模型以在控制
  • 连接字符串中包含特殊字符的密码

    我需要从 ASP NET 应用程序连接到我的 Dynamics CRM 365 本地实例 我的问题是连接帐户的密码如下 T jL4O vc t 30
  • Service Fabric 重启应用程序

    我有一个在启动时从 KeyVault 读取的服务结构应用程序 当我们更改 KeyVault 值时 我们必须重新启动节点才能读取新值 这会导致同一节点上的其他应用程序出现故障 我正在尝试编写一个 PowerShell 脚本来重新启动服务结构应
  • iOS 8 上应用内购买失败,提示用户详细信息不正确

    我们有一个带有应用内购买功能的应用程序 该应用程序在 iOS 7 上运行良好 但在 iOS 8 上 当用户尝试在应用程序中购买任何内容时 应用程序内购买会失败 并显示错误 您输入的 Apple ID 无法 找不到或您的密码不正确 请重试 即
  • __libc_start_main@plt 如何工作?

    为了研究目标文件在linux中是如何加载和运行的 我制作了最简单的c代码 文件名为simple c int main 接下来 我创建目标文件并将目标文件另存为文本文件 gcc simple c objdump xD a out gt sim
  • 使用 Perl6 语法解析二进制结构

    使用 Perl6 解析二进制结构的最佳选择是什么 在 Perl5 中 我们在 Perl6 上有 pack unpack 方法 它们似乎是实验性的 是否可以使用 Perl6 语法来解析二进制数据假设我有一个文件 其中包含以下二进制格式的记录
  • Qt 加载指示器通过动画图像(又名预加载器)还是替代方案?

    我想在加载时在我的表格视图上显示动画加载程序图像 下面的截图显示了一个印象 我为此使用了一个动画 gif 由setStyleSheet作为居中的背景图像 我面临两个问题 gif 已显示 但不是动画 是否可以显示动画 gif 作为背景图像 通
  • Celery 错误“没有这样的传输:amqp”

    Celery 工作正常 有一天命令行工作程序无法启动 并显示以下跟踪 Traceback most recent call last File home buildslave venv bin celery line 9 in
  • 如何使用 Cloudinary 将经过转换的 url 输出为字符串?

    我将在开头说这可能是错误的做法 我想做的是使用 url w transformation 到 JSdata 属性 目前 我正在使用以下内容来生成图像标签 cl image tag image asset filename to s tran
  • 将 FeedParser 对象序列化为 Atom

    我使用 feedparserhttp www feedparser org http www feedparser org 解析 Atom feed 并对生成的 Python 对象进行一些操作 之后 我想将对象序列化回 Atom 但 fee
  • React Native - 通过邮件发送照片

    我正在尝试通过邮件发送最近在应用程序中捕获的照片 但遇到以下错误 对于邮件功能 我正在使用此模块 var Mailer require NativeModules RNMail 我试图借助此模块通过邮件发送照片 但出现以下错误 index
  • 如何使用界面生成器更改 ipad 的文本字段高度?

    我们正在使用 Interface Builder 开发 iPad 应用程序 但我们不知道如何增加文本字段的高度 当我们使用 IB 为 osx 开发应用程序时 您可以转到文本字段属性 并在控制部分下将换行符设置为自动换行而不是剪辑 但是 当我
  • MultiColumnText 在 iTextSharp v5.3.3 中工作吗?

    我找不到MultiColumnTextiTextSharp v5 3 3 来自 NuGet 中的任何位置 我能找到的就是ColumnText这当然使用起来不太友好 而且超出了我真正需要的范围 我错过了什么吗 有几个链接说MultiColum
  • 使用 pymc 与 MCMC 拟合两个正态分布(直方图)?

    我正在尝试拟合 CCD 上摄谱仪检测到的线轮廓 为了便于考虑 我提供了一个演示 如果解决了 它与我的演示非常相似actually想要解决 我看过这个 https stats stackexchange com questions 46626
  • TStringList 的 addObject 方法

    我想知道这个方法调用的作用 stringList addObject String Object 我也想知道这个属性是做什么的 stringList Objects i 添加时看起来像键 值对 但是在循环检索时检索到了什么 我还看到 ite