有一种方法可以用Tcomponent进行案例陈述?,我的意思是:
begin
case Form1.Components[i] of
TEdit: //do something;
TMenuItem: //Do Something;
TButton: //Do Somtehing;
end;
end;我知道能做到这一点:
if (Form1.components[i] is TEdit) then
...但我只想知道如果可能的话用案例陈述。
致以问候。
发布于 2016-04-29 14:15:34
不那是不可能的。Case语句只支持序数类型。序数类型是预定义的类型--整数、Char、WideChar、布尔和声明的枚举类型,因此不包括类、字符串甚至浮点数。
文件上说
案例陈述 case语句可以提供深度嵌套if条件词的可读替代方案。案例陈述的形式如下: 案件selectorExpression of caseList1: statement1;caseListn:陈述;结束 其中,selectorExpression是小于32位的序号类型的任何表达式(字符串类型和大于32位的序数无效).
当然,有一些方法可以解决这个问题,比如构建一个组件类或组件名称的列表,并对该列表中的组件索引执行一个案例,但是它们是有限的(在按字符串进行匹配时,不能很容易地使用TCustomEdit来匹配TEdit、TMemo和其他组件)。所以对我来说,一个正常的如果是最好的方式来写这个。
发布于 2016-04-29 18:03:41
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;发布于 2016-04-29 14:15:23
不那是不可能的。Case语句需要枚举类型,而类类型不是。
https://stackoverflow.com/questions/36940562
复制相似问题