扑捉自定义异常(27分)

  • 主题发起人 主题发起人 lqquan34168
  • 开始时间 开始时间
L

lqquan34168

Unregistered / Unconfirmed
GUEST, unregistred user!
定义一个Integer类型的变量,只要是赋给它的值超过它的范围(11位以上)。编译器就会扑捉到一个异常并给出提示。现在我有一个这样的想法,不知能不能实现:
将Edit.Text转为数值,如果被转变成的数值不在5和15之间就引发一个自定义异常类并给出提示。这个数值是在异常类中判断的。也就是说在正常的代码中不做任何处理,只要是如果在Edit中输入一个不在5和15之间的字符,编译器就会扑捉到一个异常并给出提示。请赐教!请给出代码,包括自定义的异常类代码。谢谢!
 
发现你的想法很有意思,那么简单的事,想得太复杂了...
var
tmpNum : integer;
begin
try
tmpNum := StrToInt(Edit.Text);
if (tmpNum > 15) or (tmpNum) < 5 then
ShowMessage('数值不在5--15之间!');
except
ShowMessage('请输入数字!');
end;
end;
 
楼上就对了。
 
谢谢楼上的回答,这样处理我是明白的。我之所以在这提出这个问题的主要目的是了解异常类的处理机制,如何去扑捉一个自定义的异常。我在提问题的时候也说明了,在正常的代码中不作任何处理,让自定义异常类去处理这个“异常”。就像除数为零一样,不用在代码中作任何处理,异常类就会自动去扑捉这个异常并给出提示终止程序的运行。这里我只是举个例子而已,希望通过这个例子触类旁通。楼上的回答是达到我想要的目的,但不是通过我想要通过的方式去实现这个目的(异常类处理)。其实我注重的是过程,不是结果。谢谢!欢迎高手们继续参与讨论!
 
if not (StrToInt(Edt1.txt) in [5..15]) then
raise Exception.Create('NumberError');
 
type
EmyError=class(Exception);

if not StrToInt(Edit1.Text) in[5..15] then
Raise EmyError.create('错啦,不在范围内')
 
谢谢大家的热情参与,可能大家没有完全理解我提出问题的意思,我本意是在正常代码没有作任何处理的情况下就会自动引发异常类去捕捉异。例如:
type
EmyError=class(Exception);

var
tmp : integer;
begin
try
tmp := StrToInt(Edi1t.Text);//这里没有作任何处理,数值不在范围内就抛出异常
except
on E:EmyError do ShowMessage(E.messages);
end;
end;
不知这样能否实现?
 
大家可以参照一下这个例子,是除数为零的异常:
var
tm1 , tmp2 , tmp3 : integer;
begin
try
tmp2 := 1;
tmp3 := 0;
tmp1 := tmp2 div tmp3;//这里没有作任何处理,除数为零时候就会抛出异常
except
on E:Exception do ShowMessage(E.messages);
end;
end;
 
晕哦,你看一看Delphi自己的函数
function StrToInt(const S: string): Integer;
var
E: Integer;
begin
Val(S, Result, E);
if E <> 0 then ConvertErrorFmt(@SInvalidInteger, );
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
end;
看划线部分,再看 ConvertErrorFmt(@SInvalidInteger, )是什么东东?
procedure ConvertErrorFmt(ResString: PResStringRec
const Args: array of const)
local;
begin
raise EConvertError.CreateResFmt(ResString, Args);
end;
这就应该明白了,要满足您的要求,自己改写StrtoInt啦.
又想马儿跑,又想马儿不吃草,那怎么成?
 
接受答案了.
 
后退
顶部