我对所有虚拟树视图(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
最后一个可能是最糟糕的,因为名称是硬编码的,所以我试图在所有程序中只使用一种类型的识别。
确定哪个控件是发件人的最佳方法是什么?
答案 0 :(得分:3)
您应该更喜欢使用对象标识的测试。也就是你问题中的第一个测试:
if Sender = VST1 then
对象引用(例如Sender
或VST1
)是对象的地址。如果两个这样的地址相等,则引用指向同一个对象。反之亦然。
基于控件名称的测试可以工作但很脆弱。多个控件可以具有相同的名称。可以更改控件名称,但不能更新程序中名称的所有用途。
关于类型转换选项
if TVirtualStringTree(Sender) = VST1 then
类型转换对对象标识没有影响,因此是不必要的。不要在对象标识测试中输入转换操作数,因为这样做是虚假的。