从Unit2调用Button1单击Form1 / Unit1

时间:2014-11-24 01:06:44

标签: delphi unit-testing delphi-xe

我已经下载了Delphi XE7并且在访问其他设备时遇到了一些问题...... 我需要调用其他单位的程序,所以我将给出一个非常基本的例子,简单的程序...... 这是来自主Unit1的代码,其中包含form和button1:

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics,
  Controls, Forms, Dialogs, StdCtrls, Unit2;
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Hello');
end;

end.

这是Unit2的代码:

unit Unit2;
interface
implementation
uses Unit1;
end.

现在,如何在单元2中使用Button1Click来显示消息,当单击form1上的button1时,我们怎么说HelloFromUnit2? Unit2是没有任何东西的codeUnit ..

3 个答案:

答案 0 :(得分:2)

使用build in过程调用Click处理程序

将表格1保留原样:

unit Unit2;

interface

implementation

uses 
  Unit1;

procedure Click;
begin
  if Assigned(Form1) then
    Form1.Button1.Click;
end;

端。

答案 1 :(得分:1)

将过程声明添加到TForm1的公共部分,如下所示

type
 TForm1 = class(TForm)
           Button1: TButton;
           procedure Button1Click(Sender: TObject);
          private
          public
           Procedure SayHello;   
          end;
...
procedure TForm1.SayHello;
begin
 ShowMessage('Hello');
end;

end.

然后在Unit2中,您将调用此过程。您必须确保已经实例化Form2 - 或者为您的呼叫创建一个新实例。

将此机制用于事件处理程序!

答案 2 :(得分:1)

您帖子的标题与文字

中的问题不符

“从Unit2调用Button1单击Form1 / Unit1”对比 “现在,怎么可能将Unit1中的Button1Click变成showmessage,让我们在单击form1上的button1时说HelloFromUnit2?”

我在文中回答了问题(据我了解)。如果这不是您的意图,您可能需要在文本中重新解释该问题。

向Form1.Button1Click添加对unit2中新过程的调用

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Hello');
  SayHelloFromUnit2;  // <---- add this
end;

在unit2中,将以下内容添加到界面部分:

procedure SayHelloFromUnit2;

以及实施部分

uses Vcl.Dialogs;

procedure SayHelloFromUnit2;
begin
  ShowMessage('Hello from unit2');
end;