运行时错误提示:
Project InProject.exe raised exception class EConvertError with
message ''' is not a valid integer value'.process stopped.Use
Step or Run to continue.
Project InProject.exe raised exception class EConvertError with
message ''' is not a valid integer value'.process stopped.Use
Step or Run to continue.
可能有空格之类的。
用trim试试。
trim如何使用。请举例好吗?
try
i:=strtoint(fkks。text);
except
i:=0
end;
case i of
.....
end;
我试了你的方法。还是不行。
STR:=' 323 ';
那么用STR:=TRIM(STR);
STR就变成'323'了
你的问题不是这样的,按照你的错误提示
是因为INTTOSTR()的问题
是说你的fkks.text不是一个整数,那么你应该采用
SOLOPLAYER的方法
进行异常处理
TRY
I:=STRTOINT(FKK.TEXT);//如果有非法那么
EXCEPT
I:=0;//I就等于'0'
END;
这个方法一定可以。************
* 努力学习 *
* 全为 *
*¥人民币¥*
************
就不会继续下去!!!!!
Shift: TShiftState);
begin
case strtointDef(fkks.text,0 ) of
0: fk_lb.caption:=''; //增加
101: fk_lb.caption:='内科门诊'; ///门诊科室
102: fk_lb.caption:='外科门诊';
103: fk_lb.caption:='儿科门诊';
104: fk_lb.caption:='神内门诊';
105: fk_lb.caption:='传染门诊';
106: fk_lb.caption:='骨科门诊';
107: fk_lb.caption:='肿瘤门诊';
108: fk_lb.caption:='心内门诊';
109: fk_lb.caption:='神外门诊';
110: fk_lb.caption:='烧伤门诊';
111: fk_lb.caption:='中西医结合';
112: fk_lb.caption:='中医门诊';
113: fk_lb.caption:='公费门诊';
end;
end;
Shift: TShiftState);
begin
case strtoint(Trim(fkks.text)) of
101: fk_lb.caption:='内科门诊'; ///门诊科室
102: fk_lb.caption:='外科门诊';
103: fk_lb.caption:='儿科门诊';
104: fk_lb.caption:='神内门诊';
105: fk_lb.caption:='传染门诊';
106: fk_lb.caption:='骨科门诊';
107: fk_lb.caption:='肿瘤门诊';
108: fk_lb.caption:='心内门诊';
109: fk_lb.caption:='神外门诊';
110: fk_lb.caption:='烧伤门诊';
111: fk_lb.caption:='中西医结合';
112: fk_lb.caption:='中医门诊';
113: fk_lb.caption:='公费门诊';
end;
end;如楼上所说的,
还要防止为空。
* 努力学习 *
* 全为 *
*¥人民币¥*
************
Shift: TShiftState);
begin
//case strtoint(fkks.text) of
case strtointDef(fkks.text,0 ) of
101: fk_lb.caption:='内科门诊'; ///门诊科室
102: fk_lb.caption:='外科门诊';
103: fk_lb.caption:='儿科门诊';
104: fk_lb.caption:='神内门诊';
105: fk_lb.caption:='传染门诊';
106: fk_lb.caption:='骨科门诊';
107: fk_lb.caption:='肿瘤门诊';
108: fk_lb.caption:='心内门诊';
109: fk_lb.caption:='神外门诊';
110: fk_lb.caption:='烧伤门诊';
111: fk_lb.caption:='中西医结合';
112: fk_lb.caption:='中医门诊';
113: fk_lb.caption:='公费门诊';
else: fk_lb.caption:='错误输入'; //增加
end;end;
I:=STRTOINT(FKK.TEXT);//如果有非法那么
EXCEPT
I:=0;//I就等于'0'
END;
还用理会有没有空格,反正一切非整数的字符串
那么i都是0
************
* 努力学习 *
* 全为 *
*¥人民币¥*
************
该代码应放在 onChange 中
//case strtoint(fkks.text) of
case strtointDef(fkks.text,0 ) of
101: fk_lb.caption:='内科门诊'; ///门诊科室
102: fk_lb.caption:='外科门诊';
103: fk_lb.caption:='儿科门诊';
104: fk_lb.caption:='神内门诊';
105: fk_lb.caption:='传染门诊';
106: fk_lb.caption:='骨科门诊';
107: fk_lb.caption:='肿瘤门诊';
108: fk_lb.caption:='心内门诊';
109: fk_lb.caption:='神外门诊';
110: fk_lb.caption:='烧伤门诊';
111: fk_lb.caption:='中西医结合';
112: fk_lb.caption:='中医门诊';
113: fk_lb.caption:='公费门诊';
else: fk_lb.caption:='错误输入'; //增加
end;end;
你的错误应该是edit1.text为空,即edit1.text='',''不能转化为整型呀
还是把代码放在onChange中吧!
我有一个很不错的方法解决次问题。
下面这段代码是用来验证集装箱编号的合法性,涉及到
字符和数字转换的问题,你可以借鉴以下。const
UpperCaseChars=['A'..'Z'];
IntSet=['0','1','2','3','4','5','6','7','8','9'];function Tdm1.CheckCtnNo(ctnno: string): boolean;
var
i:integer;
temp:integer;
begin
result:=true;
if not (length(ctnno) in [10,11]) then
begin
result:=false;
exit;
end; for i:=1 to 3 do
begin
if not (ctnno[i] in Uppercasechars) then
begin
result:=false;
exit;
end;
end; if ctnno[4]<>'U' then
begin
result:=false;
exit;
end; for i:=5 to length(ctnno) do
begin
if not (ctnno[i] in IntSet) then
begin
result:=false;
exit;
end;
end; if length(ctnno)=10 then exit; temp:=0;
for i:=1 to length(ctnno)-1 do
begin
temp:=temp+GetValue(ctnno[i])*GetTwoPower(i-1);
end; if (temp mod 11)<>GetValue(ctnno[11]) then
begin
result:=false;
exit;
end;
end;function Tdm1.GetTwoPower(i: integer): integer;
begin
case i of
0:result:=1;
1:result:=2;
2:result:=4;
3:result:=8;
4:result:=16;
5:result:=32;
6:result:=64;
7:result:=128;
8:result:=256;
9:result:=512;
end;
end;function Tdm1.GetValue(c: char): integer;
begin
if c in UpperCaseChars then
case c of
'A':result:=10;
'B':result:=12;
'C':result:=13;
'D':result:=14;
'E':result:=15;
'F':result:=16;
'G':result:=17;
'H':result:=18;
'I':result:=19;
'J':result:=20;
'K':result:=21;
'L':result:=23;
'M':result:=24;
'N':result:=25;
'O':result:=26;
'P':result:=27;
'Q':result:=28;
'R':result:=29;
'S':result:=30;
'T':result:=31;
'U':result:=32;
'V':result:=34;
'W':result:=35;
'X':result:=36;
'Y':result:=37;
'Z':result:=38;
end;
if c in IntSet then
case c of
'0':result:=0;
'1':result:=1;
'2':result:=2;
'3':result:=3;
'4':result:=4;
'5':result:=5;
'6':result:=6;
'7':result:=7;
'8':result:=8;
'9':result:=9
end;
end;
2。在调用inttostr(string)之前不进行数字合法化检测是很危险的,
好像有个函数 IsNumeric()能判断字符是否数字,你还要写一个函数来 监测整个字符串。
var
I,J:Integer;
TEnterInt:Set of Char;
Str:String;
begin
Str:='';
I:=1;
for J:=I to Length(fkks.text) do{删除TEdit中的空格}
begin
if fkks.text[I]=#32 then //遇到空格时
Inc(I)
else
begin
Str:=Str+fkks.text[I];
Inc(I);
end;
end; fkks.Text:=Str; if fkks.text[1]=#48 then//判断第一位不为空格的字符是否为零
begin
ShowMessage('第一位不能为零');
Exit;
end; TEnterInt:=[#48,#49,#50,#51,#52,#53,#54,#55,#56,#57,#58]; //从0到9
for I:=1 to Length(fkks.text) do
begin
if not (fkks.text[I] in TEnterInt) then
begin
ShowMessage('fkks中包含不合规则的字符!!');
Exit;
end;
end;
case strtoint(fkks.text) of
101: fk_lb.caption:='内科门诊';
102: fk_lb.caption:='外科门诊';
103: fk_lb.caption:='儿科门诊';
104: fk_lb.caption:='神内门诊';
105: fk_lb.caption:='传染门诊';
106: fk_lb.caption:='骨科门诊';
107: fk_lb.caption:='肿瘤门诊';
108: fk_lb.caption:='心内门诊';
109: fk_lb.caption:='神外门诊';
110: fk_lb.caption:='烧伤门诊';
111: fk_lb.caption:='中西医结合';
112: fk_lb.caption:='中医门诊';
113: fk_lb.caption:='公费门诊';
end;end;