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

delphi – 如何将“Sender”参数与“As”运算符一次用于多个类?

发布时间:2020-12-15 09:11:17 所属栏目:大数据 来源:网络整理
导读:在Delphi中,有时我们需要这样做…… function TForm1.EDIT_Click(Sender: TObject);begin (Sender As TEdit).Text := '';end; …但有时我们需要重复其他对象类的功能,如… function TForm1.COMBOBOX_Click(Sender: TObject);begin (Sender As TComboBox).Tex
在Delphi中,有时我们需要这样做……

function TForm1.EDIT_Click(Sender: TObject);
begin
  (Sender As TEdit).Text := '';
end;

…但有时我们需要重复其他对象类的功能,如…

function TForm1.COMBOBOX_Click(Sender: TObject);
begin
  (Sender As TComboBox).Text := '';
end;

…因为操作符As不接受灵活性.它必须知道该类才能允许()之后的.Text.

有时代码会充满类似的函数和过程,因为我们需要使用我们无法指定的类似可视控件来执行相同的操作.

这只是一个使用示例.通常,我在更复杂的代码上使用这些代码来实现许多控件和其他类型对象的标准目标.

是否有替代或技巧使这些任务更灵活?

解决方法

使用RTTI在不相关类的类似命名属性上执行常见任务,例如:

Uses
 ...,TypInfo;

// Assigned to both TEdit and TComboBox
function TForm1.ControlClick(Sender: TObject);
var
  PropInfo: PPropInfo;
begin
  PropInfo := GetPropInfo(Sender,'Text',[]);
  if Assigned(PropInfo) then
    SetStrProp(Sender,PropInfo,'');
end;

在某些情况下,某些控件使用Text而某些控件使用Caption,例如;

function TForm1.ControlClick(Sender: TObject);
var
  PropInfo: PPropInfo;
begin
  PropInfo := GetPropInfo(Sender,[]);
  if not Assigned(PropInfo) then
    PropInfo := GetPropInfo(Sender,'Caption','');
end;

(编辑:李大同)

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

    推荐文章
      热点阅读