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

时间:2011-04-29 14:06:01

标签: delphi

我正在创建一个带有广播组对话框的代码,作为首选项表单的一部分。我们的部分代码是,当打开首选项表单时,单击无线电组,它会配置一堆东西(即如果单选按钮“关闭”则会隐藏一堆配置内容。)

我想要的是知道用户何时实际点击了广播组,而不是在首选项对话框打开时被触发。

所以代码看起来像这样:

(open preferences)...
rgMyGroupClick(nil)

procedure  TdlgPreferences.rgMyGroupClick(Sender:TObject)

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

但是,在打开首选项对话框时也会执行此代码。我应该放在那里只在用户实际点击按钮上的鼠标时执行?

由于

3 个答案:

答案 0 :(得分:16)

测试发件人

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

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将首先检查(sender is 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

答案 1 :(得分:9)

如果我正确理解你,那么你是以编程方式点击你的无线电组来设置表格的初始状态,但是在你不想运行的点击处理程序中有额外的代码?

如果是这种情况,您可能需要考虑删除将表单状态设置为自己的方法的代码,然后从无线电单击事件和表单的初始化/显示/创建中调用它。

通过这种方式,您可以使用相同的代码将表单设置为用户单击所需的状态,并以编程方式设置它,而无需在用户与对话框交互时执行任何额外的逻辑操作。或许我完全误解了你的问题......

类似的东西:

// (open preferences)...
SetStateOfFormForSelectedGroup();

procedure TdlgPreferences.SetStateOfFormForSelectedGroup()
begin
  //do all setting of form for selected group here.
end;

procedure  TdlgPreferences.rgMyGroupClick(Sender:TObject)
begin
  SetStateOfFormForSelectedGroup();
  //do something useful
end;

答案 2 :(得分:3)

尝试一些功能或属性,如:

 Sender.classtype
 InheritedFrom()

注意:使用ButtonClick( sender:TObject )的obj SENDER时(例如)   发件人=点击上的按钮类=&gt; TButton的

所以,TButton(Sender).properties或方法等......