Delphi自动完成ButtonClick程序

use*_*794 2 delphi compiler-construction autocomplete button buttonclick

因此,当您双击按钮并自动完成按钮单击过程时,我很好奇编译器如何知道函数链接到哪个按钮.例如,它将使TForm1.Button1Click(发件人:TObject);

那么编译器如何知道链接的按钮呢?它只解析过程名称以查看它是什么按钮吗?

jac*_*ate 10

您可以将方法命名为任何名称,Delphi不会解析或使用方法名称来标识关联的组件或事件.

如果您在设计时执行此操作,则事件与事件处理程序的关联将存储在DFM文件中,您可以在其中找到如下内容:

  object Button1: TButton
    Left = 104
    Top = 64
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
Run Code Online (Sandbox Code Playgroud)

OnClick = Button1Click创建表单时,使程序将方法(也称为事件处理程序)与运行时对象的事件(特殊类型的属性)相关联.

您还可以在运行时将事件关联到任何兼容方法,例如使用以下代码:

type
  TForm1 = class(TForm)
    Button1: TButton;
  private
    procedure MyClick(Sender: TObject);
    procedure MyOtherClick(Sender: TObject);


  ....

procedure TForm1.AssociateClickHandler;
begin
  Button1.OnClick := MyClick;
end;

procedure TForm1.MyClick(Sender: TObject);
begin
  Button1.OnClick := MyOtherClick; //from now, the other method with handle the event.
end;
Run Code Online (Sandbox Code Playgroud)

使用您想要的任何名称

在设计时,您可以直接在ObjectInspector中为事件处理程序编写所需的名称,然后按Enter键,Delphi将为您创建具有该名称的方法.如果您不提供名称,Delphi将使用组件名称自动生成方法的名称,并添加不带"On"的事件名称.如果该方法已存在,则IDE只会将该事件与该方法相关联.

写下所需的方法名称:

在此输入图像描述

按enter键:

在此输入图像描述

您可以将同一方法关联到同一对象的不同事件,或关联到不同对象的同一事件.

例如,您可以将上面显示的MyOwnMethodName与任意数量按钮的OnClick相关联.通常,Sender参数包含对触发事件的对象的引用.