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参数包含对触发事件的对象的引用.