请问我如何捕捉<在Edit应该输入数字的情况下输入字母>的错误,并显示错误信息?(分不多了,但请赐教)(5分)

  • 主题发起人 主题发起人 xhyph
  • 开始时间 开始时间
X

xhyph

Unregistered / Unconfirmed
GUEST, unregistred user!
try
self.m_ClientDataSet.Insert;
self.m_ClientDataSet.FieldByName('书名').AsString:=self.m_Self_BookName.Text;
self.m_ClientDataSet.FieldByName('数量').AsInteger:=self.m_Self_BookNum.AsInteger;
self.m_ClientDataSet.FieldByName('日期').AsDateTime:=self.m_Self_Date.Date;
self.m_Self_ClientDataSet.Post;
except
on E :EConvertErrordo
begin
ShowMessage('输入错误');
self.m_Self_ClientDataSet.Cancel;
end;
end;
我这个办法只能出个 <输入错误>的对话框
我想知道到底是"书名"出错还是"数量""日期"出错,
如果用E.Message又是英语的.各位,你们是怎么解决的?
 
检查完后,再给数据库赋值
在edit的onexit中添加检查程序
for i:=1 to length(edit.text)do
begin
if (copy(edit1.text,i,1)>'0') and (copy(edit1.text,i,1)<'9') then
begin
//show message
//exit
end;
end;
 
见:《电脑商情报-家用电脑》 2001-12-25 第42版 : 《关于WIN32建子类》(作者:上海 翁一鸣)
 
在Insert之前检查:
var
ee: TEdit;
try
ee := Edit1;
StrToFloat(Edit1.Text);
ee := Edit2;
StrToFloat(Edit2.Text);
except
on e: Exceptiondo
begin
ShowMessage(...);
ee.SetFocus;
Exit;
end;
end;
 
难道只能用这些土办法?不能从抛出错误中得到什么?
那还不如用我的办法呢,我用个函数把E.Message的第一个字符串分离出来就是了
 
10:控制edit输入框是数字符。
var
i:integer;
s:string;
begin
s:=edit1.text
for i:=length(edit1.text)do
wnto 1do
begin
if not (s in ['0'..'9']) then
begin
bitbtn1.enabled:=false;
exit;
end
else
bitbtn1.enabled:=ture;
end;
end;
 
procedure TForm1.Edit1KeyPress(Sender: TObject;
var Key: Char);
begin
if not(key in ['0'..'9','.']) then
begin
showmeesage('不是数字');
key:=chr(0);//&amp;Egrave;&amp;iexcl;&amp;Iuml;&amp;ucirc;&amp;acute;&amp;Euml;&amp;Ecirc;&amp;auml;&amp;Egrave;&amp;euml;
end;
end;
 
同意楼上的意见
 
多人接受答案了。
 
后退
顶部