http://www.cnblogs.com/del/archive/2008/07/08/1237856.html

非常遗憾 Delphi 的 case 语句不支持字符串, 但我觉得这也可能是基于效率的考量;
如果非要在 case 中使用字符串, 也不是不可以变通, 这里提供了五种方法.


本例效果图:


代码文件:


  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls, ExtCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     RadioGroup1: TRadioGroup;
  12.     Button1: TButton;
  13.     Button2: TButton;
  14.     Button3: TButton;
  15.     Button4: TButton;
  16.     Button5: TButton;
  17.     Button6: TButton;
  18.     procedure FormCreate(Sender: TObject);
  19.     procedure Button1Click(Sender: TObject);
  20.     procedure Button2Click(Sender: TObject);
  21.     procedure Button3Click(Sender: TObject);
  22.     procedure Button4Click(Sender: TObject);
  23.     procedure Button5Click(Sender: TObject);
  24.     procedure Button6Click(Sender: TObject);
  25.   end;
  26.  
  27. var
  28.   Form1: TForm1;
  29.  
  30. implementation
  31.  
  32. {$R *.dfm}
  33.  
  34. uses TypInfo; {操作枚举用}
  35.  
  36. {初始化一个单选组, 用于测试}
  37. procedure TForm1.FormCreate(Sender: TObject);
  38. begin
  39.   RadioGroup1.Items.CommaText := 'a,bb,ccc,dddd';
  40.   RadioGroup1.ItemIndex := ;
  41. end;
  42.  
  43. {这是 case 语句比较常规的用法}
  44. procedure TForm1.Button1Click(Sender: TObject);
  45. begin
  46.   case RadioGroup1.ItemIndex of
  47.     : Color := clRed;
  48.     : Color := clYellow;
  49.     : Color := clLime;
  50.     : Color := clBlue;
  51.   end;
  52. end;
  53.  
  54. {方法一: 假如要 case 的字符串的长度不同}
  55. procedure TForm1.Button2Click(Sender: TObject);
  56. var
  57.   str: string;
  58. begin
  59.   str := RadioGroup1.Items[RadioGroup1.ItemIndex];
  60.   case Length(str) of
  61.     : Color := clRed;
  62.     : Color := clYellow;
  63.     : Color := clLime;
  64.     : Color := clBlue;
  65.   end;
  66. end;
  67.  
  68. {方法二: 假如要 case 的字符串的第一个字母不同, case 是支持字符的}
  69. procedure TForm1.Button3Click(Sender: TObject);
  70. var
  71.   str: string;
  72. begin
  73.   str := RadioGroup1.Items[RadioGroup1.ItemIndex];
  74.   case str[] of
  75.     'a': Color := clRed;
  76.     'b': Color := clYellow;
  77.     'c': Color := clLime;
  78.     'd': Color := clBlue;
  79.   end;
  80. end;
  81.  
  82. {方法三: 借用 TStringList}
  83. procedure TForm1.Button4Click(Sender: TObject);
  84. var
  85.   List: TStringList;
  86.   str: string;
  87. begin
  88.   List := TStringList.Create;
  89.   List.Text := RadioGroup1.Items.Text;
  90.  
  91.   str := RadioGroup1.Items[RadioGroup1.ItemIndex];
  92.   case List.IndexOf(str) of
  93.     : Color := clRed;
  94.     : Color := clYellow;
  95.     : Color := clLime;
  96.     : Color := clBlue;
  97.   end;
  98.  
  99.   List.Free;
  100. end;
  101.  
  102. {方法四: 借用枚举}
  103. type
  104.   TMyEnum = (a, bb, ccc, dddd);
  105.  
  106. procedure TForm1.Button5Click(Sender: TObject);
  107. var
  108.   MyEnum: TMyEnum;
  109.   str: String;
  110. begin
  111.   str := RadioGroup1.Items[RadioGroup1.ItemIndex];
  112.  
  113.   MyEnum := TMyEnum(GetEnumvalue(TypeInfo(TMyEnum), str));
  114.   case MyEnum of
  115.     a    : Color := clRed;
  116.     bb  : Color := clYellow;
  117.     ccc  : Color := clLime;
  118.     dddd : Color := clBlue;
  119.   end;
  120. end;
  121.  
  122. {方法五: 利用对比字符串返回的整数, 这种方法并不太可靠, 但在某种情况下会更灵活}
  123. procedure TForm1.Button6Click(Sender: TObject);
  124. var
  125.   str: string;
  126. begin
  127.   str := RadioGroup1.Items[RadioGroup1.ItemIndex];
  128.   case CompareStr(str, 'a') of
  129.     : Color := clRed;
  130.     : Color := clYellow;
  131.     : Color := clLime;
  132.     : Color := clBlue;
  133.   end;
  134. end;
  135.  
  136. end.

窗体文件:

  1. object Form1: TForm1
  2. Left =
  3. Top =
  4. Caption = 'Form1'
  5. ClientHeight =
  6. ClientWidth =
  7. Color = clBtnFace
  8. Font.Charset = DEFAULT_CHARSET
  9. Font.Color = clWindowText
  10. Font.Height = -
  11. Font.Name = 'Tahoma'
  12. Font.Style = []
  13. OldCreateOrder = False
  14. Position = poDesktopCenter
  15. OnCreate = FormCreate
  16. PixelsPerInch =
  17. TextHeight =
  18. object Button1: TButton
  19. Left =
  20. Top =
  21. Width =
  22. Height =
  23. Caption = 'Button1'
  24. TabOrder =
  25. OnClick = Button1Click
  26. end
  27. object Button2: TButton
  28. Left =
  29. Top =
  30. Width =
  31. Height =
  32. Caption = 'Button2'
  33. TabOrder =
  34. OnClick = Button2Click
  35. end
  36. object Button3: TButton
  37. Left =
  38. Top =
  39. Width =
  40. Height =
  41. Caption = 'Button3'
  42. TabOrder =
  43. OnClick = Button3Click
  44. end
  45. object RadioGroup1: TRadioGroup
  46. Left =
  47. Top =
  48. Width =
  49. Height =
  50. Caption = 'RadioGroup1'
  51. TabOrder =
  52. end
  53. object Button4: TButton
  54. Left =
  55. Top =
  56. Width =
  57. Height =
  58. Caption = 'Button4'
  59. TabOrder =
  60. OnClick = Button4Click
  61. end
  62. object Button5: TButton
  63. Left =
  64. Top =
  65. Width =
  66. Height =
  67. Caption = 'Button5'
  68. TabOrder =
  69. OnClick = Button5Click
  70. end
  71. object Button6: TButton
  72. Left =
  73. Top =
  74. Width =
  75. Height =
  76. Caption = 'Button6'
  77. TabOrder =
  78. OnClick = Button6Click
  79. end
  80. end

本人用过Pos也不错;一般用枚举;

在 case 语句中使用字符串-转的更多相关文章

  1. switch case语句中能否作用在String,long上

    在之前的eclipse中使用switch的case语句时是只能为(byte,short,char)int类型或枚举类型.但在jdk1.7以后 在case语句中是可以使用String 以及long 等类 ...

  2. Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项)

    Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项) A.cat B.concat C.join D.+ 解答:B

  3. 在switch中的case语句中声明变量编译出错的解决方案

    在switch中的case语句中声明变量编译的问题 先来看段代码,别管什么意思: : , j = ; ; i < ; i++) recive_phone[i] = msgbuf.text[i]; ...

  4. 在switch中的case语句中声明变量会被提前

    原文链接:http://my.oschina.net/u/2000201/blog/514384 本人今天在编写工具类时,无意之间发现,在Java的Swith语句的case语句中声明局部变量时出现了一 ...

  5. swtich和case语句中,定义变量要加花括号

    转自: http://blog.chinaunix.net/uid-27103408-id-3340702.html http://www.xuebuyuan.com/2070170.html swi ...

  6. 关于Mysql select语句中拼接字符串的记录

    在mysql的SELECT语句中拼接两列(或多列)的字符串显示: mysql> select concat(dname,loc) from dept; 以上语句便把dept表的dname,loc ...

  7. sql语句中截取字符串

    今天在开发过程中因为要用到合并单元格,在程序里实现了以后,查出来的数据太长,都把格式撑大了,后来想想可以在sql语句查询的时候就截取,就去网上找了一下,挺好用,就转了过来: 合并单元格: /// &l ...

  8. [hive]case 语句中字符串匹配

    当使用case when时,有时会需要对某个字段做子串匹配.如果是在where条件中,我们会直接使用 like '%xx%'来匹配,但case when语句不行 这时需要使用instr函数 examp ...

  9. 【特性】select语句中使用字符串链接获取字段值失败

    坑1 在一个多行的表中,想把其中的一个字段值拿出来,组成一个字符串供后面使用. 按照以往,自己就如以下这么写了: declare @sql varchar(8000) set @sql='insert ...

随机推荐

  1. windows命令

    开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项,可以在任务管理器中选&qu ...

  2. Linux搭建Nginx

    1.Nginx安装 1.1 pcre (1)下载编译包 http://www.pcre.org/ (注意需要的是pcce,而非pcre2) (2)tar -zxvf pcre-8.36.tar.gz  ...

  3. 用RMAN备份EBS数据库的脚本

    rman_bak.sh rman target / nocatalog log=/d01/rmanbak/bak_`date +%m%d%H%M`.log<< EOF  run  {  c ...

  4. 内核编译报错Fedora20(友善)

    首先说明我的宿主机环境:Fedora20 64位,开发板是友善Smart210(S5PV210——Cotex-A8)!!!马上入题! 按照开发板的用户手册来编译内核,一直报这个错误:/opt/Frie ...

  5. 搭建zookeeper集群

    简介: Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置 ...

  6. 共享MFC dULL

    >------ 已启动生成: 项目: OSGtest, 配置: Debug Win32 ------1>正在编译...1>AddScene.cpp1>main.cpp1> ...

  7. 《PHP字符串函数》笔记

    ① str_repeat() 重复一个字符串; ② str_shuffle() 随机打乱一个字符串; ③ strftime() 根据区域设置格式化本地时间/日期; ④ strip_tags() 从字符 ...

  8. STM32学习及应用笔记一:SysTick定时器学习及应用

    这几年一直使用STM32的MCU,对ARM内核的SysTick计时器也经常使用,但几乎没有仔细了解过.最近正好要在移植一个新的操作系统时接触到了这块,据比较深入的了解了一下. 1.SysTick究竟是 ...

  9. shell 输出九九乘法表

    #/bin/bash i= j= )) do while(($j<=$i)) do echo -ne $j×$i=$[$j*$i]"\t" j=$[$j+] done ech ...

  10. MFC 创建多层目录

    创建多层目录 BOOL CTestToolCtr::CreateFolder(CString strNewFolder) { /************************************ ...