关键词:
【中文标题】在运行时创建对象并使用它们【英文标题】: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配置... 查看详情