0

来自anwser的基础如何消除变量...当我拥有所有这些组件并从主窗体中进行按钮1.click之类的操作时,我得到并接受了它的工作原理...

但我习惯从单位做出行动......所以

当我单击一个按钮时,我会看到一个过程 DoMaths(Sender: TObject);

procedure Tform1.DoMaths(Sender: TObject);
  begin
    if TButton1(Sender).hint := 'Make the standard Package' then
      do_Maths_standard_package;
  end;

do_Maths_standard_package 在单位 ComplexMaths 中。

是程序 do_Maths_standard_package 表单单元 ComplexMaths 它从 Form1 调用一些组件...例如 Form1.label1 等...

因此,当我调用 RegisterClass(TLabel) 并从类型中删除 Tlabel 时,它会给出一个错误,它无法找到 Label1 ...

请有人可以帮助我,以免从一开始就进行洞计划...

谢谢..

4

2 回答 2

0

我认为你有两个选择。

1) 您可以为每个组件分配一个唯一的数字 ID。并将其保存到 .Tag 属性中。就像你用来在 .HelpContext 属性中生成和绑定 ID 一样。

然后要按数字获取控件,您将枚举 Form.Controls 并获取具有适当标记值的控件。

问题是在 PAS 文件和 DFM 文件中有两个独立的 ID 列表同步。打字错误很难被发现。特别是因为您在 DFM 中没有常数,而只有“幻数”。

2) 设置 .Name 属性并使用 iMan Biglari 的配方 - FindComponent by name。问题是您是否可以拥有 .Name 但不能拥有变量。由于没有人回答 - 试试看。以我的经验 - 使用 Delphi 5,希望 D7 基本相同 - 你可以删除变量。

  • 如果你对变量进行了错误的声明,那么 Delphi 编辑器会注意到并要求更正它。
  • 如果你有没有 DFM 对象的变量,Delphi 会注意到它并要求删除它。
  • 但是如果有没有对应变量的DFM 对象,那么Delphi 编辑器就忽略了。也许它认为该对象是继承的或其他。但是,如果您根本没有声明它,它并不介意。

但是,由于您删除了名称,因此您似乎由于某种原因无法执行此操作。


在这两种情况下,如果某些过程对某些控件进行大量访问,您都必须缓存值。甚至可能跨越程序。实际上,至少对于大多数使用的控件,yu 会手动恢复这些变量。

于 2012-09-04T11:58:06.523 回答
0

您可能可以像这样引用您的组件:

TLabel(Form1.FindComponent('Label1')).Caption := '...';
TCheckBox(Form1.FindComponent('CheckBox12')).Checked := False;

但是真的很痛...

于 2012-09-01T13:29:43.247 回答