如何访问Sender参数正在引用的组件(激发事件的组件)的属性 [英] How to access a property of the component that the Sender parameter is referencing (the component that fired the event)
本文介绍了如何访问Sender参数正在引用的组件(激发事件的组件)的属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是Delphi和Pascal的新手,我想知道是否有一种方法可以获取/访问发送者在过程中引用的组件的属性。
更具体地说,我想创建一个过程来更改标签的标题属性,该标签是发件人引用的组件。 我设想该过程如下所示:
procedure TForm1.LabelEdit(Sender: TObject);
begin
Sender.caption := 'Sample Text';
end;
这当然行不通,但可以做类似或类似的事情吗?
推荐答案
尽管您问题中的示例实际上没有意义(它错误地建议TLabel
具有OnEdit
事件),但很可能使用Sender
参数来获取有关发件人对象的信息。
TLabel
控件。为他们提供不同的标题(如Dog
、Cat
、Rabbit
、Horse
等)。
现在在表单设计器中将它们全部选中,然后使用对象检查器为它们创建一个通用的OnClick
处理程序。您可以将其命名为LabelClick
(在OnClick
旁边的编辑字段中写入LabelClick
,然后按Enter)。
这将创建以下空方法:
procedure TForm1.LabelClick(Sender: TObject);
begin
end;
它有一个Sender
参数,类型为TObject
。现在,根据此方法的调用方式,Sender
可以是任何TObject
(按钮、窗体、位图等)或nil
(根本没有对象)。
但在我们的示例中,我们预计此方法主要是在响应被单击的标签时调用的,在这些情况下,Sender
将是相应的TLabel
对象。
让我们尝试在消息框中显示所点击标签的标题!
我们尝试
procedure TForm1.LabelClick(Sender: TObject);
begin
ShowMessage(Sender.Caption); // won't compile!
end;
但这甚至不能编译!问题是TObject
没有公共Caption
成员。但是TLabel
需要,所以我们可以写
procedure TForm1.LabelClick(Sender: TObject);
begin
ShowMessage(TLabel(Sender).Caption);
end;
这里我们告诉编译器,我们知道知道Sender
将始终是TLabel
,并且我们要求它假定它是。
但如果以某种方式使用非TLabel
Sender
调用此方法,则此方法将崩溃或做其他坏事。因此,这样做更安全
procedure TForm1.LabelClick(Sender: TObject);
begin
ShowMessage((Sender as TLabel).Caption);
end;
除了编译器现在将创建在运行时检查Sender
是否真的是TLabel
对象的代码之外,它的作用是相同的。如果不是,代码将引发异常。这比上面的不安全角色可能遇到的那种内存损坏/反病毒问题要好得多。
可以说更好的是
procedure TForm1.LabelClick(Sender: TObject);
begin
if Sender is TLabel then
ShowMessage(TLabel(Sender).Caption);
end;
这还将在运行时测试Sender
的类型。如果是标签,则显示其标题。否则,我们选择什么都不做。注意,在这里使用SAFE(并且稍微慢一点)as
强制转换是没有意义的。
这篇关于如何访问Sender参数正在引用的组件(激发事件的组件)的属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文