【问题标题】:Delphi VCL: Form elements undeclared on custom procedure/functionDelphi VCL:自定义过程/函数上未声明的表单元素
【发布时间】:2023-03-23 12:02:02
【问题描述】:

我有这个:

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

虽然按钮存在于表单上,但 btCustomers 被声明为“未声明的标识符”。我错过了什么?

附注我知道这应该由 OnCreate 表单处理,但 Welcome 过程是从外部表单调用的。

【问题讨论】:

  • 为什么你使用的过程不是任何类的成员?如果btCustomersTMyForm 的成员,procedure TMyForm.Welcome 将有权访问btCustomers。面向对象编程 = 好主意。

标签: delphi vcl


【解决方案1】:

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

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

然而,只要你有一个全局作用域函数,它的第一个参数是一个对象的引用,你就有了该对象的方法的候选者。所以,给TMyForm添加一个方法。

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

然后这样称呼它:

MyForm.Welcome(user, accesslevel);

【讨论】:

  • 如果您全局使用该函数,那么我会让它返回新字符串作为输出,而不是直接更新按钮。然后,调用 Form 可以决定在函数退出时如何处理该输出,例如更新其本地 Button。这样,该函数就不太可能失败,并且不知道它是如何被使用的,因此可以在需要时将其重用于其他目的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 2019-04-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
相关资源
最近更新 更多