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. 用swing也可以做出好看的界面

    用Swing做出的例子:JavaFX做出的界面:后来又做出了自己编写的一套基于Synth的L&F,其与直接在代码中重绘某个组件不同,最大优点是具有可插拔性,即在不改变原有程序代码的情况下,用户 ...

  2. JS这些代码你都不会,你还有什么好说的!!!

    都说自己工资低的,先看看这些代码你能写出来不?这些都不会,你还嫌工资?

  3. SQL Server数据库定时自动备份

    SQL Server 数据库定时自动备份[转]   在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库.而备份数据库一般又是在凌晨时间基本没有数据库操作的时候进行,所以我们不可能要求 ...

  4. informatica读取FTP文件

    以下为一个完整的informatica读取ftp文件,并导入到系统中. 第一步: 通过shell脚本下载压缩包文件 /server/infa_shared/crm_prod/shell/ftpFrom ...

  5. java常用工具

    /** * 将字节数组转换成字符串 * @param array 字节数组 * @return String */ public static String byte2str(byte[] array ...

  6. dex文件格式三

    先来看看整体的结构,结构体定义在DexFile.h里面   在dexFileSetupBasicPointers中设置各个子结构体,当然是在解析DexHeader之后 源码在DexFile.c文件中 ...

  7. js_闭包

    先从闭包特点解释,应该更好理解.闭包的两个特点:1.作为一个函数变量的一个引用 - 当函数返回时,其处于激活状态.2.一个闭包就是当一个函数返回时,一个没有释放资源的栈区.其实上面两点可以合成一点,就 ...

  8. Oracle10g 表分区

    1.分区的原因 (1)Tables greater than 2GB should always be considered for partitioning. (2)Tables containin ...

  9. angular-route 和soket注意细节点

    route run 文件是第一个位置,之后才配置路由哪些,代码: angular.module('technodeApp',['ngRoute']).run(function($window,$roo ...

  10. Flex 1046: 找不到类型,或者它不是编译时常数;1180: 调用的方法 CompPropInfo 可能未定义

    导入项目之后一直报这个错误, 1046: 找不到类型,或者它不是编译时常数: 1180: 调用的方法 CompPropInfo 可能未定义 想这应该是没有把当前这个类编译进项目当中,找了半天也没有找到 ...