Delphi VCL:自定义过程/函数未声明的表单元素

Mar*_*tin 0 delphi vcl

我有这个:

procedure Welcome(user: string; accesslevel: integer);
begin
   if accesslevel>= 10  then btCustomers.Text = 'Customer overview';
end;
Run Code Online (Sandbox Code Playgroud)

虽然,当按钮存在于窗体上时,btCustomers被声明为"未声明的标识符".我错过了什么?

PS我知道这应该由OnCreate形式处理,但欢迎程序从外部表单调用.

Dav*_*nan 5

您可以传递对表单的引用,以便可以依次引用该按钮.

procedure Welcome(form: TMyForm; user: string; accesslevel: integer);
begin
   if accesslevel>= 10  then form.btCustomers.Text = 'Customer overview';
end;
Run Code Online (Sandbox Code Playgroud)

但是,只要有一个全局范围函数将第一个参数作为对象的引用,就可以使用该对象的方法.所以,添加一个方法TMyForm.

procedure TMyForm.Welcome(user: string; accesslevel: integer);
begin
   if accesslevel>= 10  then btCustomers.Text = 'Customer overview';
end;
Run Code Online (Sandbox Code Playgroud)

并称之为:

MyForm.Welcome(user, accesslevel);
Run Code Online (Sandbox Code Playgroud)

  • 如果你使用全局函数,那么我会让它返回新字符串作为输出,而不是直接更新Button.然后调用Form可以决定在函数退出时如何处理该输出,例如更新其本地Button.这样,该功能变得不太可能失败,并且变得不知道如何使用它,因此如果需要它可以被重用于其他目的. (3认同)