在C++Builder中实现输入有效性验证
?牐犜贑++Builder中实现数据有效性验证是相当简单的事情!用个别内联函数便可轻松搞定。
?牐犕贾邢允玖宋颐墙谡飧鍪道薪?立的窗体。通过在如^26020503a^所示的设计中添加两个编辑域,三个单选按钮和两个静态文本域构造这个窗体。我们将在这个实例中用多种方案实现输入有效性验证。
?牐犑紫任颐歉爸辉市硎淙胧帧钡パ“磁ヌ砑右桓龃?理程序。如果选择了这个按钮,在其上方的编辑域将会显示“只允许输入数字:”。把下列代码加入C++Builder窗体的事件处理程序中:
?牐爒oid_fastcall TForm1::RadioButton1Click(TObject *Sender)
?牐爗
?牐燣abel1->Caption="只允许输入数字:";
?牐燛dit1->OnKeyPress=Edit1KeyPress1;
?牐爙
?牐犎缓笪颐歉嗉虻腒eyPress事件设置有效性验证处理程序,用到的是ctype.h中所包含的isdigit函数,处理程序名为:Edit1KeyPress1。代码如下:
?牐爒oid_fastcall TForm1::Edit1KeyPress1(TObject *Sender,char &Key)
?牐爗
?牐爄f(!isdigit(Key))
?牐燢ey=0;
?牐爙
?牐犝飧龀绦蛑幌允居没?输入的每一个字符。ctype.h包含文件中的isdigit函数检查是否字符在0~9的范围内,如果字符在这个范围内,函数返回true,否则返回false。isdigit的语法是C++的简写方式,表明其下语句只将在函数返回false时才执行。将Key参数设为0,告知Edit组件这个字符将被忽略。
?牐牨嘁氩⒃诵姓飧龀绦颍颐墙荒茉贓dit1中输入0~9之间的数字,键盘的其它键都将失去效用。
?牐犂嗨频模颐俏诙龅パ“磁ァ霸市硇∈闶淙搿碧砑哟?理程序:
?牐爒oid_fastcall TForm1::RadioButton2Click(TObject *Sender)
?牐爗
?牐燣abel1->Caption="允许小数点输入:";
?牐燛dit1->OnKeyPress=Edit1KeyPress2;
?牐爙
?牐犖颐欠⑾諩dit1KeyPress2的函数代码与第一个输入处理程序很相像:
?牐爒oid_fastcall TForm1::Edit1KeyPress2(TObject *Sender,char &Key)
?牐爗
?牐爄f(!isdigit(Key)&&Key!='.')
?牐燢ey=0;
?牐爙
?牐犠詈笠桓龅パ“磁ピ市砣我馐淙耄颐侨绾问迪炙兀靠纯聪旅娴拇耄遣皇歉闫舴⒛兀?
?牐爒oid_fastcall TForm1::RadioButton3Click(TObject *Sender)
?牐爗
?牐燣abel1->Caption="允许任意输入:";
?牐燛dit1->OnKeyPress=NULL;
?牐爙
?牐犖颐墙玂nKeyPress设置为NULL,而并不是把事件处理程序设置为方法。这清除了该程序的事件处理程序,并允许标准Edit组件处理程序(它包含任何字符)占有优先权!
?牐犛惺焙蛭颐强赡芟不兜却没г谕瓿墒淙耄缓蟮彼鞘酝祭肟糜蚴痹傺橹な荨?C++Builder也能很容易地实现这个目的。
?牐犖嗽谟没?输入后处理数据有效性验证,就必须为第二个编辑域Edit2的OnExit事件添加一个处理程序。代码如下:
?牐爒oid_fastcall TForm1::Edit2Exit(TObject *Sender)
?牐爗
?牐燽ool bFlag=true;
?牐燾har s=Edit2->Text.c_str();
?牐?//首先确定输入的是否都是数字
?牐爁or(int I=0;I<(int)strlen(s);++i=
?牐爗
?牐燾har c=s[i];
?牐爄f(!isdigit(c))
?牐燽Flag=false;
?牐爙
?牐?//检验是否通过
?牐爄f(bFlag==false)
?牐爙
?牐燤essageBox(NULL,"你只能输入数字!","错误",MB_OK);
?牐燛dit2->SetFocus();
?牐爎eturn;
?牐爙
?牐?//以下检查数字是否在0~9之间
?牐爈ong lVal=atol(Edit2->Text.c_str());
?牐爄f(lVal<0||lVal>9=
?牐爗
?牐燤essageBox(NULL,"你应该输入0~9之间的数字!","错误",MB_OK);
?牐燛dit2->SetFocus();
?牐爎eturn;
?牐爙
?牐爙
?牐犝飧龃?理程序首先验证输入只包含数字。如果它不能够实现这个测试,将显示错误消息,并且输入焦点返回到有问题的编辑域中。
?牐犝龀绦蚋潞蟮陌募缦拢ù痔逦砑拥牟糠郑?:
?牐燾lass TForm1:public TForm
?牐爗
?牐燺published: //IDE-managed Components
?牐燭Label *Label1;
?牐燭Edit *Edit1;
?牐燭RadioButton *RadioButton1;
?牐燭RadioButton *RadioButton2;
?牐燭RadioButton *RadioButton3;
?牐燭Edit *Edit2;
?牐燭Label *Label2;
?牐燭BitBtn *BitBtn1;
?牐爒oid_fastcall Edit1KeyPress1(TObject *Sender,char &Key);
?牐爒oid_fastcall RadioButton1Click(TObject *Sender);
?牐爒oid_fastcall RadioButton2Click(TObject *Sender);
?牐爒oid_fastcall RadioButton3Click(TObject *Sender);
?牐爒oid_fastcall Edit2Exit(TObject *Sender);
?牐爌rivate: //User declarations
?牐爒oid_fastcall Edit1KeyPress2(TObject *Sender,char &Key);
?牐爌ublic: //User declarations
?牐燺fastcall TForm1(TComponent* Owner);
?牐爙;
?牐燨K,在C++Builder上实现数据有效性检验的方法差不多介绍完毕,如果读者有更多更好更妙的方法,也希望通过“编程乐园”与大家一起交流!