Delphi中带有TComponent的Case语句
有一种方法可以使用Tcomponent?进行案例陈述,我的意思是:Delphi中带有TComponent的Case语句,delphi,Delphi,有一种方法可以使用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 ... 但我只是想知道,如果可能的话,用案例陈述 问候。
begin
case Form1.Components[i] of
TEdit: //do something;
TMenuItem: //Do Something;
TButton: //Do Somtehing;
end;
end;
我知道你能做到这一点:
if (Form1.components[i] is TEdit) then
...
但我只是想知道,如果可能的话,用案例陈述
问候。不,那是不可能的。Case语句需要枚举类型,而类类型不是。否,这是不可能的。Case语句需要枚举类型,而类类型不是。否,这是不可能的。案例陈述仅支持。序数类型是预定义的类型Integer、Char、WideChar、Boolean和声明的枚举类型,因此不包括类、字符串甚至浮点数 : 案例陈述 case语句可以提供一个可读的替代方案,以避免深度嵌套 如果条件句。案例陈述的形式如下:
case selectorExpression of
caseList1: statement1;
...
caseListn: statementn;
end
其中selectorExpression是任何序号类型的表达式
小于32位(字符串类型和序数大于32位
无效)
当然,有很多方法可以解决这个问题,比如构建一个组件类或组件名列表,并对该列表中组件的索引进行大小写,但它们是有限的(当通过字符串进行匹配时,不能轻松地使用TCustomEdit来匹配TEdit、TMemo和其他组件)。所以对我来说,正常的if是写这个的最好方式。不,这是不可能的。案例陈述仅支持。序数类型是预定义的类型Integer、Char、WideChar、Boolean和声明的枚举类型,因此不包括类、字符串甚至浮点数
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;
:
案例陈述
case语句可以提供一个可读的替代方案,以避免深度嵌套
如果条件句。案例陈述的形式如下:
case selectorExpression of
caseList1: statement1;
...
caseListn: statementn;
end
其中selectorExpression是任何序号类型的表达式
小于32位(字符串类型和序数大于32位
无效)
当然,有很多方法可以解决这个问题,比如构建一个组件类或组件名列表,并对该列表中组件的索引进行大小写,但它们是有限的(当通过字符串进行匹配时,不能轻松地使用TCustomEdit来匹配TEdit、TMemo和其他组件)。因此,对我来说,a正常if是写这篇文章的最好方式。谢谢@uwerabeordinal(!)类型谢谢@uwerabeordinal(!)类型
TObject的案例x:。。。。;TPO对象。。。;t成分:。。。;TWinControl:。。。。;结束代码>-如果您将TButton
作为x传递,编译器应该采用哪个分支?@Arioch'当然是第一个。@GolezTrol我不这么认为。在记录
声明中,例如案例
获取TObject的每个匹配部分案例x:。。。。;TPO对象。。。;t成分:。。。;TWinControl:。。。。;结束代码>-如果您将TButton
作为x传递,编译器应该采用哪个分支?@Arioch'当然是第一个。@GolezTrol我不这么认为。在记录
声明中,例如案例
获取每个匹配部分
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;