在运行时创建对象并使用它们

     2023-02-23     233

关键词:

【中文标题】在运行时创建对象并使用它们【英文标题】:Create objects in runtime and work with them 【发布时间】:2015-03-09 09:45:45 【问题描述】:

我的程序运行时创建的对象有问题

首先我创建 n 个对象(假设 n := 3)

for i:=0 to n-1 do
  begin
    With TGauge.Create(Form1) do
      begin
        Parent  := Form1;  // this is important
        Left    := 20;     // X coordinate
        Top     := 20+i*45;     // Y coordinate
        Width   := 250;
        Height  := 20;
        Kind    := gkHorizontalBar;
        Name    := 'MyGauge'+IntToStr(i);
        //.... 
        Visible := True;
      end;
  end;

这 3 个对象已创建并在表单中可见。现在我想改变它的属性,但是每当我尝试访问这些创建的对象时,我只会得到 ​​p>

EAccessViolation

例如,当我尝试获取一个对象的名称时

g := Form1.FindComponent('MyGauge0') as TGauge;
Form1.Label1.Caption:=g.Name;

【问题讨论】:

最好将它们的引用存储到一个数组中,或者一个类似集合的列表中。 对于 n=3,你有 3 个对象,而不是 4 个。 @Inspired 感谢您的通知。只是拼写错误 “这很重要”我认为你的代码所有都很重要:-) 【参考方案1】:

您的代码失败,因为FindComponent 返回nil。这是因为Form1 对象不拥有具有该名称的组件。从这里很难说为什么会如此。

但是,使用名称查找是解决问题的错误方法。不要使用名称来指代组件。将它们的引用保存在一个数组中。

var
  Gauges: array of TGauge;
....
SetLength(Gauges, N);
for I := 0 to N-1 do
begin
  Gauges[i] := TGauge.Create(Form1);
  ....
end;

然后您可以使用该数组引用控件。

我还要评论说,您指的是Form1 全局对象很奇怪。在TForm1 类中执行此操作可能会更好,因此能够使用隐式Self 实例。

【讨论】:

动态内存——动态内存与智能指针(代码片段)

...译器自动创建和销毁。对于栈对象,仅在其定义的程序块运行时才存在;static对象在使用之前分配,在程序结束时销毁。  除了静态内存和栈内存,每个程序还拥有一个内存池。这部分内存被称作自由空间和堆。程序用堆来存... 查看详情

在运行时使用 XML 构建对象的最佳方式

】在运行时使用XML构建对象的最佳方式【英文标题】:BestwayforbuildingobjectsoutofXMLsatruntime【发布时间】:2013-07-1122:05:56【问题描述】:我的情况是,我有很多XML,它们是从服务器发送给我的,我正在使用JAXB或任何基于该架构的API... 查看详情

创建 QtChart 对象会在运行时创建 EXC_BAD_ACCESS 错误

】创建QtChart对象会在运行时创建EXC_BAD_ACCESS错误【英文标题】:CreationofQtChartobjectcreatesEXC_BAD_ACCESSerroruponruntime【发布时间】:2018-09-2712:11:49【问题描述】:出于实践原因,我目前正在尝试将一些代码从Python移动到C++,并尝试使用... 查看详情

如何将多个对象写入可序列化文件并在再次使用程序时读取它们?

】如何将多个对象写入可序列化文件并在再次使用程序时读取它们?【英文标题】:HowdoIwritemultipleobjectstotheserializablefileandreadthemwhentheprogramisusedagain?【发布时间】:2015-07-1220:16:37【问题描述】:我想为我的项目维护银行用户数据... 查看详情

保存在运行时创建的标签

】保存在运行时创建的标签【英文标题】:Savinglabelscreatedatrun-time【发布时间】:2013-10-3017:03:50【问题描述】:我正在使用此代码向我的表单添加标签,但是当我关闭表单时,它们都消失了。有没有办法保存标签或创建一个每次... 查看详情

在 C++ 运行时动态创建类对象

】在C++运行时动态创建类对象【英文标题】:DynamicallycreatingclassobjectsduringruntimeinC++【发布时间】:2013-12-0902:25:18【问题描述】:我试图在运行时创建对象。我有未指定数量的对象要创建,我完全迷失了。有人告诉我要使用指针... 查看详情

AnyLogic - 在仿真时动态创建对象

...【发布时间】:2017-01-1204:44:00【问题描述】:是否可以在运行时动态创建对象或修改它们?例如,单击按钮、创建另一个按钮或更改道路的行数?当我为按钮操作编写此代码时,在运行时road123.setBackwardLanesCount(3);我收到以下错误... 查看详情

最佳实践:通过存储在 DB 中的方案在运行时创建 ORM 对象

】最佳实践:通过存储在DB中的方案在运行时创建ORM对象【英文标题】:Bestpractice:CreatingORMobjectsatruntimebyschemestoredinDB【发布时间】:2010-06-0414:42:07【问题描述】:在我当前的项目(大型企业系统)中,当“简单”对象(如表、引... 查看详情

动态内存

...译器自动创建和销毁。对于栈对象,仅在其定义的程序块运行时才存在;static对象在使用之前分配,在程序结束时销毁。 除了静态内存和栈内存,每个程序还拥有一个内存池。这部分内存被称作自由空间或堆。程序用堆来存... 查看详情

SpriteKit - 创建随机对象并使用 deltatime 移动它们

】SpriteKit-创建随机对象并使用deltatime移动它们【英文标题】:SpriteKit-Createrandomobjectsandmovethemusingdeltatime【发布时间】:2016-02-2305:38:50【问题描述】:在我的游戏中,我想每隔几秒调用一个函数,从数组中创建随机对象。目前我... 查看详情

Docker 构建:mkdir 创建文件夹,但它们在运行时消失

】Docker构建:mkdir创建文件夹,但它们在运行时消失【英文标题】:Dockerbuild:mkdircreatesfolders,buttheydisappearinruntime【发布时间】:2017-01-1108:23:59【问题描述】:我正在尝试使用以下Dockerfile扩展Apache2Docker容器:FROMjoomla:3-apache-php7RUNap... 查看详情

在工作线程中创建对象并绑定到它们

】在工作线程中创建对象并绑定到它们【英文标题】:Createobjectsinworkerthreadandbindtothem【发布时间】:2011-08-0416:25:54【问题描述】:我在C#/WPF/.NET4.0中遇到了跨线程操作的问题。情况:当用户单击按钮然后绑定到树时,我必须创建... 查看详情

有没有办法使用相同的布局动态创建片段并向它们显示数据?

】有没有办法使用相同的布局动态创建片段并向它们显示数据?【英文标题】:Isthereawaytodynamicallycreatefragmentsanddisplaydatatothemusingthesamelayout?【发布时间】:2021-09-2223:23:45【问题描述】:我编写了从远程端点获取JSON对象的代码。... 查看详情

使用反向字段时自动创建一对一关系

】使用反向字段时自动创建一对一关系【英文标题】:AutomaticallycreateOne-To-Onerelationwhenusingreversefield【发布时间】:2017-08-2411:30:40【问题描述】:当创建模型的两个实例并使用OneToOneField连接它们时,连接会在对象创建时自动创建... 查看详情

从两个可迭代对象创建字典并同时使用它们

】从两个可迭代对象创建字典并同时使用它们【英文标题】:Creatingadictionaryfromtwoiterablesandconsumingbothofthem【发布时间】:2011-06-1121:28:23【问题描述】:假设我有两个列表,我想用它们制作字典。喜欢:>>>l=[1,2,3,4,5]>>>... 查看详情

在运行时向对象添加属性,并保存到数据库

】在运行时向对象添加属性,并保存到数据库【英文标题】:Addingpropertiestoobjectatruntime,andsavingtoadatabase【发布时间】:2013-05-1117:46:28【问题描述】:我有一组模型类定义,每个都有一些属性和方法。每个新的模型类定义都映射到... 查看详情

在模拟器上运行时,我的 Android 布局设计不在同一位置,并显示它们的位置不正确

】在模拟器上运行时,我的Android布局设计不在同一位置,并显示它们的位置不正确【英文标题】:MyAndroidlayoutdesignisnotonthesameplacementwhenrunningitonemulator,andshowsthemincorrectpositioned【发布时间】:2017-12-0708:29:09【问题描述】:我正在... 查看详情

检查对象是不是在运行时使用 TypeScript 实现接口

】检查对象是不是在运行时使用TypeScript实现接口【英文标题】:CheckifanobjectimplementsaninterfaceatruntimewithTypeScript检查对象是否在运行时使用TypeScript实现接口【发布时间】:2016-02-2109:29:03【问题描述】:我在运行时加载一个JSON配置... 查看详情