gpt4 book ai didi

delphi - 在Delphi XE中设置运行时的onclick事件

转载 作者:行者123 更新时间:2023-12-01 19:43:08 25 4
gpt4 key购买 nike

这里是第一次发帖,如有任何礼仪错误,请原谅。

我正在 Delphi XE8 中创建一个多设备 (FMX) 应用程序,但在将事件处理程序分配给动态创建的按钮时遇到困难。我搜索了 StackOverflow 并找到了与 NotifyEvents 相关的答案,因此我遵循了这些答案中的建议 - 仍然没有运气。编译错误为“E2010 不兼容类型:‘TNotifyEvent’和‘Procedure’”。

我已经将一个带有编辑字段和静态“Hello”按钮的表单的简单测试用例放在一起,第二个按钮创建了“Goodbye”按钮并尝试将过程分配给 OnClick 事件,但我仍然得到相同的结果错误。

据我所知,我已经遵循了使过程与 TNotifyEvent 兼容的所有要求,但即使这个基本示例也因相同的错误而失败。我正在用头撞墙,所以有人可以让我知道我做错了什么吗?

非常感谢。

unit Dynamic_Button_Test1;

interface

uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
FMX.Controls.Presentation, FMX.Edit;

type
TForm1 = class(TForm)
Edit1: TEdit;
Hello: TButton;
Create_GoodBye: TButton;
procedure HelloClick(Sender: TObject);
procedure Create_GoodByeClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure GoodbyeClick(Sender: TObject) ;
end;

var
Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.Create_GoodByeClick(Sender: TObject);
var
New_Button : TButton ;
begin
New_Button := TButton.Create( Form1 );
New_Button.Parent := Form1 ;
New_Button.Text := 'Goodbye' ;
New_Button.Visible := True ;
New_Button.Margins.Left := 50 ;
New_Button.Margins.Right := 50 ;
New_Button.Margins.Bottom := 30 ;
New_Button.Height := 50 ;
New_Button.Align := TAlignLayout.Bottom ;

New_Button.OnClick := TForm1.GoodbyeClick ;
end;

procedure TForm1.HelloClick(Sender: TObject);
begin
Edit1.Text := 'Hello' ;
end;

procedure TForm1.GoodbyeClick(Sender: TObject);
begin
Edit1.Text := 'Goodbye' ;
end;

end.

最佳答案

VCL/FMX 事件处理程序在运行时与特定对象绑定(bind)。分配事件处理程序时,您需要将类类型名替换为对象指针。当稍后触发事件时,该对象将是事件处理程序的 Self 指针:

New_Button.OnClick := Self.GoodbyeClick ;

或者简单地说:

New_Button.OnClick := GoodbyeClick ; // Self implicitly used

附带说明 - 创建按钮时,该代码位于 TForm1 实例方法内部,因此您应该使用 Self 对象指针而不是全局指针Form1对象指针:

New_Button := TButton.Create( Self );
New_Button.Parent := Self ;

关于delphi - 在Delphi XE中设置运行时的onclick事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31274021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com