加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在Delphi中识别发件人的Tobject类型?

发布时间:2020-12-15 04:09:00 所属栏目:大数据 来源:网络整理
导读:我正在创建一个带有广播组的对话框的代码,作为首选项表单的一部分.我们的部分代码是,当打开首选项表单时,单击无线电组,它会配置一堆东西(即如果单选按钮’关闭’则会隐藏一堆配置内容). 我想要的是知道用户何时实际点击无线电组,而不是在首选项对话框打开时
我正在创建一个带有广播组的对话框的代码,作为首选项表单的一部分.我们的部分代码是,当打开首选项表单时,单击无线电组,它会配置一堆东西(即如果单选按钮’关闭’则会隐藏一堆配置内容).

我想要的是知道用户何时实际点击无线电组,而不是在首选项对话框打开时被触发.

所以代码看起来像这样:

(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 ....

是关键字测试,以查看对象是否属于某种类型.
请注意,如果AObject是TObject,则测试始终为true,因为每个对象都是从TObject派生的.

类型转换更有趣

对象类型和所有祖先的测试也可以用于其他目的:

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(发件人),您可以阅读类型转换.
这里:http://delphi.about.com/od/delphitips2007/qt/is_as_cast.htm
在这里:http://delphi.about.com/od/oopindelphi/a/delphi_oop11.htm

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读