gpt4 book ai didi

delphi - Delphi中如何识别发送者的Tobject类型?

转载 作者:行者123 更新时间:2023-12-03 14:49:14 27 4
gpt4 key购买 nike

我正在为带有单选按钮组的对话框创建代码,作为首选项表单的一部分。我们代码的一部分是,当打开首选项表单时,单击单选按钮组,这会配置一堆内容(即,如果单选按钮处于“关闭”状态,则隐藏一堆配置内容)。

我想要知道用户何时实际单击单选按钮组,而不是在首选项对话框打开时触发单选按钮组。

所以代码如下所示:

(open preferences)...
rgMyGroupClick(nil)

procedure TdlgPreferences.rgMyGroupClick(Sender:TObject)

if sender <> nil then
begin
//do something useful
end;

但是当打开首选项对话框时也会执行此代码。我应该在那里放置什么,以便仅在用户实际单击按钮上的鼠标时执行?

谢谢

最佳答案

测试您的发件人

您可以通过两种方式测试发件人:

procedure TdlgPreferences.rgMyGroupClick(Sender:TObject)
begin
if sender = RadioButton1 then //do action
else if sender = RadioButton2 then ....

或者您可以测试发件人的类型。

procedure TdlgPreferences.rgMyGroupClick(Sender:TObject)
begin
if sender is TRadioButton then //do action
else if sender is TForm then ....

is 关键字测试对象是否属于某种类型。
请注意,测试 if AObject is TObject 始终为 true,因为每个对象都是从 TObject 派生的。

类型转换带来更多乐趣

事实上,is 测试对象类型,并且所有祖先也可以用于其他目的:

procedure TdlgPreferences.rgMyGroupClick(Sender:TObject)
begin
//TObject does not have a 'tag' property, but all TControls do...
if (sender is TControl) and (TControl(Sender).Tag = 10) then ....

因为short-circuit boolean evaluation Delphi 将首先检查(发送者是 TControl),并且如果为真则继续。使后续测试(TControl(Sender).Tag = 10)可以安全使用。

如果您不理解构造TControl(Sender),您可以阅读类型转换。
这里:http://delphi.about.com/od/delphitips2007/qt/is_as_cast.htm
在这里:http://delphi.about.com/od/oopindelphi/a/delphi_oop11.htm

关于delphi - Delphi中如何识别发送者的Tobject类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5833130/

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