Delphi 获取单击的对象的名称
我在运行时在viewport3D中制作了一堆Tcube。我想知道是否点击了一个。如果是,则返回此TCube的名称 我所说的一个小例子Delphi 获取单击的对象的名称,delphi,firemonkey,Delphi,Firemonkey,我在运行时在viewport3D中制作了一堆Tcube。我想知道是否点击了一个。如果是,则返回此TCube的名称 我所说的一个小例子 procedure blockClicked; begin //get name of block //checkMode ( add , delete, other) //get name of block x, y, and z //do other stuff end; 如果只为所有这些TCube对象分配一个公共事件,并通过键入Sender
procedure blockClicked;
begin
//get name of block
//checkMode ( add , delete, other)
//get name of block x, y, and z
//do other stuff
end;
如果只为所有这些
TCube
对象分配一个公共事件,并通过键入Sender
参数(如TCube(Sender)…
)来访问单击的对象,怎么样?@TLama听起来会起作用。。但是有一个基本的设置如何?我添加了一个答案,这看起来对吗?我只是在猜测?我不知道您是如何创建对象的,但基本上您需要创建一个与事件方法原型匹配的私有方法。在这种情况下,发送到TNotifyEvent
。在代码中,这可能看起来像(根据您之前关于数组的问题)。在VCL应用程序中也会这样做。您想要名称,不是吗?因此,代码中仍然缺少该属性。尝试使用(发送方为TCube)。在某处命名。是的,这是正确的。无论如何,如果您确信cubelick
方法将始终仅分配给TCube
对象,则可以使用直接类型转换方式Cube:=TCube(发送方)代码>。as
操作符(Sender as TCube
)更安全,因为它尝试将对象类型转换为所需类型,如果不可能,它会引发一个异常,而对于直接类型转换(TCube(Sender)
),您只希望对象(Sender
)将属于所需类型(但如果不是那种类型,那就糟糕了)。感谢您尝试一下,看看会发生什么:D@Sherlock70,如果要多次访问该对象,最好将该对象引用存储到局部变量(在由注释get name of block x、y和z表示的问题中)。现在OP可以通过Cube.Name、Cube.Position.X等方式访问对象属性。@TLama使用as
cast实际上是一种运行时断言,表明代码是正确的。执行该测试不会花费任何明显的时间,因为UI单击从来都不是CPU瓶颈。在这方面,我总是使用as
这是一种情景。
procedure TForm1.cubeClick(Sender: TObject);
var
Cube: TCube;
begin
// Senders points to the cube clicked
cube := Sender as Tcube;
end;