在我的程序中,我有很多相互调用的过程。在其中之一中,我需要更改标签的标题。
从中我得到一个错误:
未声明的标识符:“标签”
我知道这是错误的原因。
我不知道如何解决这个问题,因为我不想让所有过程成为表单的一部分或通过所有过程传递标签。
以下是代码摘录:
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();
。
对于帮助,我将非常感激。
有几种不同的方法可以处理这个问题。
您可以传递标签:
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;