作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试检查事件 ( TNotifyEvent
) 是否已分配有特定的 procedure(Sender: TObject) of object
.
这是我的示例代码:
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
if(Button1.OnClick = Button1Click) then
begin
//...
end;
end;
在这种情况下,我收到以下错误消息:
[DCC Error] Unit1.pas(28): E2035 Not enough actual parameters
所以,我尝试如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
if(@Button1.OnClick = @Button1Click) then
begin
//...
end;
end;
编译时,错误更改为:
[DCC Error] Unit1.pas(28): E2036 Variable required
如何检查是否 Button1.OnClick
指向Button1Click
?
最佳答案
... of object
过程/函数被实现为闭包,其中包含 2 个指针 - 一个用于隐式 Self
参数的指针,以及指向过程/函数本身的指针。您可以使用 TMethod
记录访问这些指针以直接比较它们:
procedure TForm1.Button1Click(Sender: TObject);
var
oc1, oc2: TNotifyEvent;
begin
oc1 := Button1.OnClick;
oc2 := Button1Click;
if (TMethod(oc1).Data = TMethod(oc2).Data) and
(TMethod(oc1).Code = TMethod(oc2).Code) then
begin
//...
end;
end;
关于delphi - 如何比较一个事件及其相应的过程,避免E2035和E2036?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54673205/
我在 Java 中遇到异常处理问题,这是我的代码。当我尝试运行此行时出现编译器错误:throw new MojException("Bledne dane");。错误是: exception MojE
我刚刚开始学习asp.net。在你们的支持下,我希望我能从这个论坛学到更多东西。 我的问题是, 我在 asp.net 页面中有一个 TabContainer1,因为每个选项卡面板中有多个类似 (60)
我是一名优秀的程序员,十分优秀!