首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Delphi中用TComponent进行案例陈述

在Delphi中用TComponent进行案例陈述
EN

Stack Overflow用户
提问于 2016-04-29 14:10:42
回答 3查看 2.4K关注 0票数 1

有一种方法可以用Tcomponent进行案例陈述?,我的意思是:

代码语言:javascript
复制
begin
  case Form1.Components[i] of
    TEdit: //do something;
    TMenuItem: //Do Something;
    TButton: //Do Somtehing;
  end;
end;

我知道能做到这一点:

代码语言:javascript
复制
if (Form1.components[i] is TEdit) then
...

但我只想知道如果可能的话用案例陈述。

致以问候。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-29 14:15:34

不那是不可能的。Case语句只支持序数类型。序数类型是预定义的类型--整数、Char、WideChar、布尔和声明的枚举类型,因此不包括类、字符串甚至浮点数。

文件上说

案例陈述 case语句可以提供深度嵌套if条件词的可读替代方案。案例陈述的形式如下: 案件selectorExpression of caseList1: statement1;caseListn:陈述;结束 其中,selectorExpression是小于32位的序号类型的任何表达式(字符串类型和大于32位的序数无效).

当然,有一些方法可以解决这个问题,比如构建一个组件类或组件名称的列表,并对该列表中的组件索引执行一个案例,但是它们是有限的(在按字符串进行匹配时,不能很容易地使用TCustomEdit来匹配TEdit、TMemo和其他组件)。所以对我来说,一个正常的如果是最好的方式来写这个。

票数 7
EN

Stack Overflow用户

发布于 2016-04-29 18:03:41

代码语言:javascript
复制
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;
票数 8
EN

Stack Overflow用户

发布于 2016-04-29 14:15:23

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36940562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档