gpt4 book ai didi

delphi - 发送 self 不起作用

转载 作者:行者123 更新时间:2023-12-01 23:06:53 25 4
gpt4 key购买 nike

不确定如何制作标题,请根据需要进行编辑。我有一个程序

procedure TFZone1Mod7.ChangeText(sender: TObject);
var
ShapeOrderNo: integer;
FoundComponent: TComponent;
begin
if TryStrToInt(copy(TShape(Sender).Name,6,MaxInt),ShapeOrderNo) then
begin
FoundComponent := FindComponent('label'+inttostr(ShapeOrderNo+12));
if (FoundComponent is TLabel) then
Label25.Caption := TLabel(FoundComponent).Caption
else
showmessage('not found');
end;
showmessage(TShape(sender).Name);

end;

所以我在 Shape1MouseEnter 上调用该过程。所以我认为( self )会发送 shape1 但它不会发送表单(TFZone1Mod7) 我怎样才能让它发送形状?这就是我的称呼。

procedure TFZone1Mod7.Shape1MouseEnter(Sender: TObject);
begin
changetext(self);
end;

最佳答案

在这个方法中

procedure TFZone1Mod7.Shape1MouseEnter

SelfTFZone1Mod7 类型的对象。这就是你的形式。请记住,Self 指的是与事件方法关联的实例。在您的代码中,类是一个表单,因此实例 Self 始终是一个表单实例。

要了解Self 是什么,请查看procedurefunction 关键字后面的类型。 Self 实例是该类型的实例。

在您的情况下,如果您想传递形状,可以传递 Shape1,或者更一般地说,传递 Sender。后者允许您在多个形状之间共享一个事件处理程序。

这种错误凸显了为什么您应该使用带有 as 运算符的检查强制转换。当您犯错时,您会立即以有用的方式得到通知。你未经检查的强制转换只会导致难以理解的神秘错误。

因此,我可能倾向于将 ChangeText 声明为接收 TShape 类型的参数。然后这样调用它:

ChangeText(Sender as TShape);

这允许您从 ChangeText 中删除强制转换,并将它们限制在事件处理程序中,该事件处理程序必须只有一个 TObject 实例,Sender,可用。

关于delphi - 发送 self 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13025038/

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