Her*_*iik 0 delphi components runtime reference delphi-7
我的程序运行时创建的对象有问题
首先我创建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;
Run Code Online (Sandbox Code Playgroud)
这三个对象在表单中创建并可见.现在我想改变它的'属性,但每当我尝试访问这些创建的对象时,我只会得到它
EAccessViolation
Run Code Online (Sandbox Code Playgroud)
例如,当我尝试获取一个对象的名称时
g := Form1.FindComponent('MyGauge0') as TGauge;
Form1.Label1.Caption:=g.Name;
Run Code Online (Sandbox Code Playgroud)
您的代码失败,因为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;
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用该数组引用控件.
我还会评论你指的是Form1全局对象很奇怪.在TForm1类中执行此操作可能会更好,因此可以使用隐式Self实例.
| 归档时间: |
|
| 查看次数: |
776 次 |
| 最近记录: |