Delphi中TComponent的case语句

时间:2016-04-29 14:10:42

标签: delphi

有一种方法可以用Tcomponent做一个case语句吗?我的意思是:

begin
  case Form1.Components[i] of
    TEdit: //do something;
    TMenuItem: //Do Something;
    TButton: //Do Somtehing;
  end;
end;

我知道可以这样做:

if (Form1.components[i] is TEdit) then
...

但我想知道if case语句是否可能。

问候。

3 个答案:

答案 0 :(得分:6)

不,那是不可能的。案例陈述仅支持ordinal types。序数类型是预定义类型Integer,Char,WideChar,Boolean和声明的枚举类型,因此不包括类,字符串甚至浮点数。

The documentation says

  

案例陈述

     

case语句可能提供深度嵌套的可读替代方法   如果条件限制。案例陈述的格式为:

case selectorExpression of
  caseList1: statement1;
   ...
  caseListn: statementn;
end
     

其中 selectorExpression 是序数类型的任何表达式   小于32位(字符串类型和大于32位的序数   无效)....

答案 1 :(得分:4)

Case IndexStr(Form1.Components[i].classname, ['TEdit', 'TButton', 'TmenuItem', 'etc...']) of 
  0: ..code..;                   // TEdit
  1: ..code..;                   // TButton
  2: ..code..;                   // TMenuItem
 -1: ShowMessage('Not Present'); // not present in array
else
  ShowMessage('Default Option'); // present, but not handled above
end;

答案 2 :(得分:1)

不,那是不可能的。 case语句需要枚举类型,类类型不是。