有很多方法可以做到这一点,哪一种最合适取决于具体情况,所以从技术上讲,这个问题对于 Stack Overflow 来说过于宽泛,我怀疑。
方法一
不过,让我向您展示一种非常简单的方法。这可能不是一个好方法,但它似乎接近您正在尝试做的事情。
- 创建一个新的 VCL 应用程序。
- 在主窗体上放置一个
TButton 和一个TEdit 控件(Unit1 中的TForm1)。
-
创建一个新单元,Unit2:
unit Unit2;
interface
procedure SetCaption;
implementation
uses
Unit1;
procedure SetCaption;
begin
Unit1.Form1.Edit1.Text := 'Hello, World!';
end;
end.
-
在主窗体上,为按钮的OnClick 事件使用此事件处理程序:
procedure TForm1.Button1Click(Sender: TObject);
begin
Unit2.SetCaption;
end;
在您将Unit2 添加到implementation 部分的uses 子句之后。完整的,
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Unit2.SetCaption;
end;
end.
如果仅在实现部分中引用,请注意这些单元如何相互使用。另请注意,我们使用Unit1 中的全局Form1 变量来引用自动创建的TForm1 实例。在许多(大多数)情况下,您不想使用自动创建的表单,但那是另一回事(我可以在这里写一本 100 页的 Delphi 教科书!)。
方法二
另外,让我重申一个事实,即有许多其他方法可以实现这一结果。例如,这可以说是一种更好的方法:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Unit2.SetCaption(Edit1);
end;
end.
unit Unit2;
interface
uses
StdCtrls;
procedure SetCaption(AEdit: TCustomEdit);
implementation
procedure SetCaption(AEdit: TCustomEdit);
begin
AEdit.Text := 'Hello, World!';
end;
end.
方法3
可以说更好:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := Unit2.GetText;
end;
end.
unit Unit2;
interface
function GetText: string;
implementation
function GetText: string;
begin
Result := 'Hello, World!';
end;
end.