在 case 语句中使用字符串-转
http://www.cnblogs.com/del/archive/2008/07/08/1237856.html
非常遗憾 Delphi 的 case 语句不支持字符串, 但我觉得这也可能是基于效率的考量;
如果非要在 case 中使用字符串, 也不是不可以变通, 这里提供了五种方法.
本例效果图:
代码文件:
- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, ExtCtrls;
- type
- TForm1 = class(TForm)
- RadioGroup1: TRadioGroup;
- Button1: TButton;
- Button2: TButton;
- Button3: TButton;
- Button4: TButton;
- Button5: TButton;
- Button6: TButton;
- procedure FormCreate(Sender: TObject);
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- procedure Button4Click(Sender: TObject);
- procedure Button5Click(Sender: TObject);
- procedure Button6Click(Sender: TObject);
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.dfm}
- uses TypInfo; {操作枚举用}
- {初始化一个单选组, 用于测试}
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- RadioGroup1.Items.CommaText := 'a,bb,ccc,dddd';
- RadioGroup1.ItemIndex := ;
- end;
- {这是 case 语句比较常规的用法}
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- case RadioGroup1.ItemIndex of
- : Color := clRed;
- : Color := clYellow;
- : Color := clLime;
- : Color := clBlue;
- end;
- end;
- {方法一: 假如要 case 的字符串的长度不同}
- procedure TForm1.Button2Click(Sender: TObject);
- var
- str: string;
- begin
- str := RadioGroup1.Items[RadioGroup1.ItemIndex];
- case Length(str) of
- : Color := clRed;
- : Color := clYellow;
- : Color := clLime;
- : Color := clBlue;
- end;
- end;
- {方法二: 假如要 case 的字符串的第一个字母不同, case 是支持字符的}
- procedure TForm1.Button3Click(Sender: TObject);
- var
- str: string;
- begin
- str := RadioGroup1.Items[RadioGroup1.ItemIndex];
- case str[] of
- 'a': Color := clRed;
- 'b': Color := clYellow;
- 'c': Color := clLime;
- 'd': Color := clBlue;
- end;
- end;
- {方法三: 借用 TStringList}
- procedure TForm1.Button4Click(Sender: TObject);
- var
- List: TStringList;
- str: string;
- begin
- List := TStringList.Create;
- List.Text := RadioGroup1.Items.Text;
- str := RadioGroup1.Items[RadioGroup1.ItemIndex];
- case List.IndexOf(str) of
- : Color := clRed;
- : Color := clYellow;
- : Color := clLime;
- : Color := clBlue;
- end;
- List.Free;
- end;
- {方法四: 借用枚举}
- type
- TMyEnum = (a, bb, ccc, dddd);
- procedure TForm1.Button5Click(Sender: TObject);
- var
- MyEnum: TMyEnum;
- str: String;
- begin
- str := RadioGroup1.Items[RadioGroup1.ItemIndex];
- MyEnum := TMyEnum(GetEnumvalue(TypeInfo(TMyEnum), str));
- case MyEnum of
- a : Color := clRed;
- bb : Color := clYellow;
- ccc : Color := clLime;
- dddd : Color := clBlue;
- end;
- end;
- {方法五: 利用对比字符串返回的整数, 这种方法并不太可靠, 但在某种情况下会更灵活}
- procedure TForm1.Button6Click(Sender: TObject);
- var
- str: string;
- begin
- str := RadioGroup1.Items[RadioGroup1.ItemIndex];
- case CompareStr(str, 'a') of
- : Color := clRed;
- : Color := clYellow;
- : Color := clLime;
- : Color := clBlue;
- end;
- end;
- end.
窗体文件:
- object Form1: TForm1
- Left =
- Top =
- Caption = 'Form1'
- ClientHeight =
- ClientWidth =
- Color = clBtnFace
- Font.Charset = DEFAULT_CHARSET
- Font.Color = clWindowText
- Font.Height = -
- Font.Name = 'Tahoma'
- Font.Style = []
- OldCreateOrder = False
- Position = poDesktopCenter
- OnCreate = FormCreate
- PixelsPerInch =
- TextHeight =
- object Button1: TButton
- Left =
- Top =
- Width =
- Height =
- Caption = 'Button1'
- TabOrder =
- OnClick = Button1Click
- end
- object Button2: TButton
- Left =
- Top =
- Width =
- Height =
- Caption = 'Button2'
- TabOrder =
- OnClick = Button2Click
- end
- object Button3: TButton
- Left =
- Top =
- Width =
- Height =
- Caption = 'Button3'
- TabOrder =
- OnClick = Button3Click
- end
- object RadioGroup1: TRadioGroup
- Left =
- Top =
- Width =
- Height =
- Caption = 'RadioGroup1'
- TabOrder =
- end
- object Button4: TButton
- Left =
- Top =
- Width =
- Height =
- Caption = 'Button4'
- TabOrder =
- OnClick = Button4Click
- end
- object Button5: TButton
- Left =
- Top =
- Width =
- Height =
- Caption = 'Button5'
- TabOrder =
- OnClick = Button5Click
- end
- object Button6: TButton
- Left =
- Top =
- Width =
- Height =
- Caption = 'Button6'
- TabOrder =
- OnClick = Button6Click
- end
- end
本人用过Pos也不错;一般用枚举;
在 case 语句中使用字符串-转的更多相关文章
- switch case语句中能否作用在String,long上
在之前的eclipse中使用switch的case语句时是只能为(byte,short,char)int类型或枚举类型.但在jdk1.7以后 在case语句中是可以使用String 以及long 等类 ...
- Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项)
Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项) A.cat B.concat C.join D.+ 解答:B
- 在switch中的case语句中声明变量编译出错的解决方案
在switch中的case语句中声明变量编译的问题 先来看段代码,别管什么意思: : , j = ; ; i < ; i++) recive_phone[i] = msgbuf.text[i]; ...
- 在switch中的case语句中声明变量会被提前
原文链接:http://my.oschina.net/u/2000201/blog/514384 本人今天在编写工具类时,无意之间发现,在Java的Swith语句的case语句中声明局部变量时出现了一 ...
- swtich和case语句中,定义变量要加花括号
转自: http://blog.chinaunix.net/uid-27103408-id-3340702.html http://www.xuebuyuan.com/2070170.html swi ...
- 关于Mysql select语句中拼接字符串的记录
在mysql的SELECT语句中拼接两列(或多列)的字符串显示: mysql> select concat(dname,loc) from dept; 以上语句便把dept表的dname,loc ...
- sql语句中截取字符串
今天在开发过程中因为要用到合并单元格,在程序里实现了以后,查出来的数据太长,都把格式撑大了,后来想想可以在sql语句查询的时候就截取,就去网上找了一下,挺好用,就转了过来: 合并单元格: /// &l ...
- [hive]case 语句中字符串匹配
当使用case when时,有时会需要对某个字段做子串匹配.如果是在where条件中,我们会直接使用 like '%xx%'来匹配,但case when语句不行 这时需要使用instr函数 examp ...
- 【特性】select语句中使用字符串链接获取字段值失败
坑1 在一个多行的表中,想把其中的一个字段值拿出来,组成一个字符串供后面使用. 按照以往,自己就如以下这么写了: declare @sql varchar(8000) set @sql='insert ...
随机推荐
- 用swing也可以做出好看的界面
用Swing做出的例子:JavaFX做出的界面:后来又做出了自己编写的一套基于Synth的L&F,其与直接在代码中重绘某个组件不同,最大优点是具有可插拔性,即在不改变原有程序代码的情况下,用户 ...
- JS这些代码你都不会,你还有什么好说的!!!
都说自己工资低的,先看看这些代码你能写出来不?这些都不会,你还嫌工资?
- SQL Server数据库定时自动备份
SQL Server 数据库定时自动备份[转] 在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库.而备份数据库一般又是在凌晨时间基本没有数据库操作的时候进行,所以我们不可能要求 ...
- informatica读取FTP文件
以下为一个完整的informatica读取ftp文件,并导入到系统中. 第一步: 通过shell脚本下载压缩包文件 /server/infa_shared/crm_prod/shell/ftpFrom ...
- java常用工具
/** * 将字节数组转换成字符串 * @param array 字节数组 * @return String */ public static String byte2str(byte[] array ...
- dex文件格式三
先来看看整体的结构,结构体定义在DexFile.h里面 在dexFileSetupBasicPointers中设置各个子结构体,当然是在解析DexHeader之后 源码在DexFile.c文件中 ...
- js_闭包
先从闭包特点解释,应该更好理解.闭包的两个特点:1.作为一个函数变量的一个引用 - 当函数返回时,其处于激活状态.2.一个闭包就是当一个函数返回时,一个没有释放资源的栈区.其实上面两点可以合成一点,就 ...
- Oracle10g 表分区
1.分区的原因 (1)Tables greater than 2GB should always be considered for partitioning. (2)Tables containin ...
- angular-route 和soket注意细节点
route run 文件是第一个位置,之后才配置路由哪些,代码: angular.module('technodeApp',['ngRoute']).run(function($window,$roo ...
- Flex 1046: 找不到类型,或者它不是编译时常数;1180: 调用的方法 CompPropInfo 可能未定义
导入项目之后一直报这个错误, 1046: 找不到类型,或者它不是编译时常数: 1180: 调用的方法 CompPropInfo 可能未定义 想这应该是没有把当前这个类编译进项目当中,找了半天也没有找到 ...