3. 下面程序中form1上面有一个DBEdit1,其DataSource 为DataSource1,DataSource1 的DataSet为ADOQuery1,DBEdit1的DataField 为istatus。程序运行后
a..限制用户在DBEdit1中不能输入小于0,且提示用户‘请输入大于0的数‘,
b。用户在DBEdit1中输入大于100时,提示用户‘请输入小于100的数‘,
下面列举了四个事件,你认为哪两个事件最合适分别实现a,b,请在其中填入能实现要求的代码。unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, Mask, DBCtrls, ADODB;
type
TForm1 = class(TForm)
Button1: TButton;
ADOQuery1: TADOQuery;
ADOQuery1istatus: TIntegerField;
Label1: TLabel;
DBEdit1: TDBEdit;
DataSource1: TDataSource;
procedure DBEdit1Exit(Sender: TObject);
procedure DBEdit1KeyPress(Sender: TObject; var Key: Char);
procedure ADOQuery1istatusValidate(Sender: TField);
procedure ADOQuery1istatusChange(Sender: TField);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.DBEdit1Exit(Sender: TObject);
begin
end;procedure TForm1.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin
end;procedure TForm1.ADOQuery1istatusValidate(Sender: TField);
begin
end;procedure TForm1.ADOQuery1istatusChange(Sender: TField);
begin
end;
end.
a..限制用户在DBEdit1中不能输入小于0,且提示用户‘请输入大于0的数‘,
b。用户在DBEdit1中输入大于100时,提示用户‘请输入小于100的数‘,
下面列举了四个事件,你认为哪两个事件最合适分别实现a,b,请在其中填入能实现要求的代码。unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, Mask, DBCtrls, ADODB;
type
TForm1 = class(TForm)
Button1: TButton;
ADOQuery1: TADOQuery;
ADOQuery1istatus: TIntegerField;
Label1: TLabel;
DBEdit1: TDBEdit;
DataSource1: TDataSource;
procedure DBEdit1Exit(Sender: TObject);
procedure DBEdit1KeyPress(Sender: TObject; var Key: Char);
procedure ADOQuery1istatusValidate(Sender: TField);
procedure ADOQuery1istatusChange(Sender: TField);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.DBEdit1Exit(Sender: TObject);
begin
end;procedure TForm1.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin
end;procedure TForm1.ADOQuery1istatusValidate(Sender: TField);
begin
end;procedure TForm1.ADOQuery1istatusChange(Sender: TField);
begin
end;
end.
当编辑框失去焦点时,即 DBEdit1Exit 事件里判断数据是否大于100
if (key in ['_',//你可以在这加一些别的拦截信息]) or (StroInt(DBEdit1.Text)>100)
showmeessage('请输如0到100之间的数');
begin
key:=#0;
showmessage('请输如0到100之间的数');
end;
begin
key:=#0;
showmessage('请输如0到100之间的数');
end;
begin
key := #0;
end;
if(strtoint(Edit1.Text)>100)then
showmessage('過了100');
end;
begin
key:=#0;
showmessage('请输如0到100之间的数');
end;----------大哥,有點專業精神好不好 ,自己先測了再發上來,別被笑話了。
procedure TForm1.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in['0'..'9','.',,#8]) then
begin
key := #0;
end;
end;
//---然后在作提交时进行判断
//---若在0..100则提交,否则返回提示输入错误信息
try
if (strtoint(DBEdit1.Text) < 0) and (strtoint(DBEdit1.Text) > 100) then
begin
Key := #0;
MessageBox(Handle,'输入数字只能在0..100之间!','请重新输入',MB_OK + MB_ICONINFORMATION);
end;
//--以下为执行提交数据库的代码 finally
//---释放资源代码
end;
a要求放在DBEdit1KeyPress,楼上的有人给出代码了,
b要求放在ADOQuery1istatusValidate,代码也很简单,不写了。
用户书写完后才能判断。
用DBEdit1KeyPress事件,万一人家用户是用鼠标点呢,有的用户就是习惯用鼠标点到某个dbedit,
然后输入数据,然后再用鼠标点下 一个dbedit,这时候 DBEdit1KeyPress事件有屁用呀
b。用户在DBEdit1中输入大于100时,提示用户‘请输入小于100的数‘,
注意两个要求不一样,a是根本就不能输入输入小于0的数,也就是在按键的时候就不能输错,不是等输了一个错的可以再验证告诉你,这个是错的;而b是你可以输入错误的,但是要离开的时候我验证不对就不行。
b. ADOQuery1istatusValidate
能否给出理由和原代码?
begin
if (Key='-') then begin //只有负数才能小于0,不允许输入'-'就能达到目的
Key:=#0;
ShowMessage('请输入大于0的数');
end;
end;procedure TForm1.DBEdit1Exit(Sender: TObject);
begin
if ADOQuery1istatus.Value>=100 then begin
ShowMessage('请输入小于100的数');
DBEdit1.SetFocus;
end;
end;