如何识别哪个控件是发件人?

时间:2016-01-02 01:29:10

标签: delphi delphi-xe7 sender virtualtreeview

我对所有虚拟树视图(TVirtualStringTree)使用通用过程,所以我只有1个代码需要维护,就像OnClick一样,我使用所有VST控件设置的Common_VST_OnClick:

procedure TForm1.Common_VST_OnClick(Sender: TObject);

为了执行基于VST在点击过程中调用此代码的代码,我意识到我使用了许多不同的方法来识别哪个控件是Sender:

if Sender = VST1 then   

if Sender.Name = VST1.Name then    

if TVirtualStringTree(Sender) = VST1 then

if TVirtualStringTree(Sender).Name = VST1.Name then

if TVirtualStringTree(Sender).Name = 'VST1' then

最后一个可能是最糟糕的,因为名称是硬编码的,所以我试图在所有程序中只使用一种类型的识别。

确定哪个控件是发件人的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

您应该更喜欢使用对象标识的测试。也就是你问题中的第一个测试:

if Sender = VST1 then

对象引用(例如SenderVST1)是对象的地址。如果两个这样的地址相等,则引用指向同一个对象。反之亦然。

基于控件名称的测试可以工作但很脆弱。多个控件可以具有相同的名称。可以更改控件名称,但不能更新程序中名称的所有用途。

关于类型转换选项

if TVirtualStringTree(Sender) = VST1 then

类型转换对对象标识没有影响,因此是不必要的。不要在对象标识测试中输入转换操作数,因为这样做是虚假的。