限制TEDIT编辑框输入的字符

在实际应用中,为了程序的稳定性,通常需要限制TEDIT编辑框输入的字符,例如一个TEDIT用来输入浮点数时,则必须限定该输入框只能输入“0-9”及小数点,这样程序的处理就简单很多了。

启动delphi 2010,新建一个VCL Forms Application delphi项目。

截图06.jpg
2010-1-16 14:57


在窗体上放置一个TEDIT及TBUTTON按钮,如下图所示:

截图07.jpg
2010-1-16 14:57


把Edit1的name属性改为:输入

把Button1的name属性改为:确定

再把Edit1的text属性的字符清空。

截图11.jpg
2010-1-16 15:22

TOP

选择Edit1,在对象监视器(Object Inspector)中的事件页(Events)中找到“KeyPress"键盘事件,并双击右边的输入框。

截图08.jpg
2010-1-16 15:02


双击后变会自动填上事件调用,如下图:

截图09.jpg
2010-1-16 15:02


同时代码编辑器也自动为你准备好了。

截图10.jpg
2010-1-16 15:04

TOP

我们要编写的程序很简单,在onKeyPress事件中,Key参数是一个字符,这样我们就可以在在onKeyPress事件中过滤掉用户所输入的字符。

因此我们要实现楼主位所需要的代码非常简单,只需要在在onKeyPress事件中加入如下代码即可:
  1. if not ( Key in ['0'..'9','.',#8] ) then
  2.   Key := #0;
复制代码
完整的onKeyPress事件代码如下:
  1. procedure TForm2.输入KeyPress(Sender: TObject; var Key: Char);
  2. begin
  3.   if not ( Key in ['0'..'9','.',#8] ) then
  4.     Key := #0;
  5. end;
复制代码
这个程序的意思是当Key的字符不是0-9、'.'或退格键时将Key改为“#0”,也就是说将用户输入的除上述字符外都给过滤了。

直接将工程编译运行F9即可,这时编辑框只能输入0-9、'.'或退格键了。

如果把代码改成下面则只能输入0-9的数字字符
  1. procedure TForm2.输入KeyPress(Sender: TObject; var Key: Char);
  2. begin
  3.   if not ( Key in ['0'..'9','.',#8] ) then
  4.     Key := #0;
  5. end;
复制代码
如果要限制输入框只能输入十六进制数的字符,则改成:
  1. procedure TForm2.输入KeyPress(Sender: TObject; var Key: Char);
  2. begin
  3.   Key := UpCase(Key);
  4.   if not ( Key in ['0'..'9','A'..'F',#8] ) then
  5.     Key := #0;
  6. end;
复制代码

TOP

我觉得,还应该限制一下,只能输入一次小数点 “.”

不然的话,敲进去几个小数点,就算不出错看着也不正规,呵呵

TOP

这个完全可以做到。
方法就是再加个检查程序段(最好做成一个函数),把Edit1.text的内容扫一次,如果小数点的数量等于1并且当前输入的字符是“.",则直执行:Key := #0;

TOP

本帖最后由 lostgb 于 2010-1-16 22:28 编辑

我属于懒惰型...呵呵,都是用 SUIPack 包中的 suiNumberEdit 数字输入控件
习惯不好,太依赖现成的东西了

TOP

简单写了个函数:

先加下函数声明:

截图12.jpg
2010-1-16 22:34


现在程序中加入如下函数体。
  1. //如果字符串中含有小数点则返回真
  2. function TForm2.检查小数点(字符串: String): Boolean;
  3. begin
  4.   if Pos('.',字符串) > 0 then
  5.     begin
  6.       检查小数点 := True;
  7.     end
  8.   else
  9.     begin
  10.       检查小数点 := False;
  11.     end;
  12. end;
复制代码
修改onKeyPress事件如下所示:
  1. procedure TForm2.输入KeyPress(Sender: TObject; var Key: Char);
  2. var
  3.   Temp_Str : String;
  4. begin
  5.   Temp_Str :=  Trim(输入.Text);
  6.   if (检查小数点(Temp_Str) = True) and ( Key = '.') then
  7.     Key := #0;
  8.   Key := UpCase(Key);
  9.   if not ( Key in ['0'..'9','.',#8]) then
  10.     Key := #0;
  11. end;
复制代码
运行程序,此时在输入框中只能输入一个小数点了。

TOP

第一次用中文的函数名,感觉挺不错呢。

TOP

我属于懒惰型...呵呵,都是用 SUIPack 包中的 suiNumberEdit 数字输入控件
习惯不好,太依赖现成的东西了
lostgb 发表于 2010-1-16 22:27


我一般是需要什么功能就自已去实现,用第三方的控件有总觉得不踏实。

TOP

Review opelc.org on alexa.com