来自anwser How to eliminate variables...的基础我获得并接受它,当我拥有所有这些组件并且从主窗体中执行类似button1.click的操作时效果很好......
但我用来制作单位的动作......所以
当我点击一个按钮我很棒的程序DoMaths(发件人: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 ...
请有人帮助我,所以不要从头开始做洞程序......
谢谢..
答案 0 :(得分:0)
您可以像这样引用您的组件:
TLabel(Form1.FindComponent('Label1')).Caption := '...';
TCheckBox(Form1.FindComponent('CheckBox12')).Checked := False;
但这真的很痛苦......
答案 1 :(得分:0)
我认为你有两种选择。
1)您可以为每个组件分配唯一的数字ID。 并将其保存到.Tag属性中。 就像你用来生成和绑定.HelpContext属性中的ID一样。
然后,要按编号获取控件,您将枚举Form.Controls并获取具有正确Tag值的那个。
问题是在PAS文件和DFM文件中有两个单独的ID列表同步。迷雾很难被注意到。特别是因为你在DFM中没有常数但只有“魔术数字”。
2)设置.Name属性并按名称使用iMan Biglari的配方 - FindComponent。 问题是你是否可以拥有.Name而不是变量。因为没有人回答 - 只是试着看。 根据我的经验 - 使用Delphi 5,希望D7大致相同 - 你可以删除变量。
但是,由于您删除了名称,因此出于某种原因看起来不可能。
在这两种情况下,如果某些过程对某些控件进行了大量访问,则必须缓存值。甚至可能跨过程序。实际上,yu将至少为大多数使用的控件手动恢复这些变量。