如何从 Delphi 中的过程内的过程访问标签?

问题描述 投票:0回答:1

在我的程序中,我有很多相互调用的过程。在其中之一中,我需要更改标签的标题。

从中我得到一个错误:

未声明的标识符:“标签”

我知道是错误的原因。

我不知道如何解决这个问题,因为我不想让所有过程成为表单的一部分或通过所有过程传递标签。

以下是代码摘录:

procedure Print(Display: );
var
  Text_Label:String;
begin
     Text_Label:=IntToStr(first_number_Int);
     Label_Display.Caption:=Text_Label;
end;

procedure number_press(number_pressed:String);
begin
     first_number_Str:= first_number_Str+number_pressed;
     Print();
end;

procedure TForm1.Button_1Click(Sender: TObject);
begin
   number_press('1');
end;

我已经在许多按钮单击事件中使用了

number_press(...);
,并且我将在代码中多次使用
Print();

对于帮助,我将非常感激。

delphi label procedure
1个回答
0
投票

有几种不同的方法可以处理这个问题。

您可以传递标签:

procedure Print(Label_Display: TLabel);
begin
  Label_Display.Caption := ...;
end;

procedure number_press(...; Label_Display: TLabel);
begin
  ...
  Print(Label_Display);
end;

procedure TForm1.Button_1Click(Sender: TObject);
begin
  number_press(..., Label1);
end;

您可以将回调与匿名过程一起使用,例如:

type
  DisplayCallback = reference to procedure(NewCaption: String);

procedure Print(Label_Display: DisplayCallback);
begin
  Label_Display(...);
end;

procedure number_press(...; Label_Display: DisplayCallback);
begin
  ...
  Print(Label_Display);
end;

procedure TForm1.Button_1Click(Sender: TObject);
begin
  number_press(...,
    procedure(NewCaption: String)
    begin
      Label1.Caption := NewCaption;
    end
  );
end;

或者,如果所有内容都在同一单元中,则只需使用表单的全局指针:

procedure Print;
begin
  Form1.Label1.Caption := ...;
end;

procedure number_press(...);
begin
  ...
  Print();
end;

procedure TForm1.Button_1Click(Sender: TObject);
begin
  number_press(...);
end;
© www.soinside.com 2019 - 2024. All rights reserved.