限制TEDIT编辑框输入的字符

发布: 2010-1-16 14:24 | 作者: binglin | 来源: StmFans思蜕盟 OPELC 自由电子联盟

在实际应用中,为了程序的稳定性,通常需要限制TEDIT编辑框输入的字符,例如一个TEDIT用来输入浮点数时,则必须限定该输入框只能输入“0-9”及小数点,这样程序的处理就简单很多了。
binglin (2010-1-16 14:57:21)
启动delphi 2010,新建一个VCL Forms Application delphi项目。


截图06.jpg



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


截图07.jpg



把Edit1的name属性改为:输入

把Button1的name属性改为:确定

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


截图11.jpg

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


截图08.jpg



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


截图09.jpg



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


截图10.jpg

binglin (2010-1-16 15:20:52)
我们要编写的程序很简单,在onKeyPress事件中,Key参数是一个字符,这样我们就可以在在onKeyPress事件中过滤掉用户所输入的字符。

因此我们要实现楼主位所需要的代码非常简单,只需要在在onKeyPress事件中加入如下代码即可:

CODE:

if not ( Key in ['0'..'9','.',#8] ) then
  Key := #0;
完整的onKeyPress事件代码如下:

CODE:

procedure TForm2.输入KeyPress(Sender: TObject; var Key: Char);
begin
  if not ( Key in ['0'..'9','.',#8] ) then
    Key := #0;
end;
这个程序的意思是当Key的字符不是0-9、'.'或退格键时将Key改为“#0”,也就是说将用户输入的除上述字符外都给过滤了。

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

如果把代码改成下面则只能输入0-9的数字字符

CODE:

procedure TForm2.输入KeyPress(Sender: TObject; var Key: Char);
begin
  if not ( Key in ['0'..'9','.',#8] ) then
    Key := #0;
end;
如果要限制输入框只能输入十六进制数的字符,则改成:

CODE:

procedure TForm2.输入KeyPress(Sender: TObject; var Key: Char);
begin
  Key := UpCase(Key);
  if not ( Key in ['0'..'9','A'..'F',#8] ) then
    Key := #0;
end;
lostgb (2010-1-16 20:35:34)
我觉得,还应该限制一下,只能输入一次小数点 “.”

不然的话,敲进去几个小数点,就算不出错看着也不正规,呵呵
binglin (2010-1-16 21:59:15)
这个完全可以做到。
方法就是再加个检查程序段(最好做成一个函数),把Edit1.text的内容扫一次,如果小数点的数量等于1并且当前输入的字符是“.",则直执行:Key := #0;
lostgb (2010-1-16 22:27:44)
[i=s] 本帖最后由 lostgb 于 2010-1-16 22:28 编辑

我属于懒惰型...呵呵,都是用 SUIPack 包中的 suiNumberEdit 数字输入控件
习惯不好,太依赖现成的东西了
binglin (2010-1-16 22:34:53)
简单写了个函数:

先加下函数声明:


截图12.jpg



现在程序中加入如下函数体。

CODE:

//如果字符串中含有小数点则返回真
function TForm2.检查小数点(字符串: String): Boolean;
begin
  if Pos('.',字符串) > 0 then
    begin
      检查小数点 := True;
    end
  else
    begin
      检查小数点 := False;
    end;
end;
修改onKeyPress事件如下所示:

CODE:

procedure TForm2.输入KeyPress(Sender: TObject; var Key: Char);
var
  Temp_Str : String;
begin
  Temp_Str :=  Trim(输入.Text);
  if (检查小数点(Temp_Str) = True) and ( Key = '.') then
    Key := #0;
  Key := UpCase(Key);
  if not ( Key in ['0'..'9','.',#8]) then
    Key := #0;
end;
运行程序,此时在输入框中只能输入一个小数点了。
binglin (2010-1-16 22:35:30)
第一次用中文的函数名,感觉挺不错呢。
binglin (2010-1-16 22:36:28)

QUOTE:

我属于懒惰型...呵呵,都是用 SUIPack 包中的 suiNumberEdit 数字输入控件
习惯不好,太依赖现成的东西了
lostgb 发表于 2010-1-16 22:27
我一般是需要什么功能就自已去实现,用第三方的控件有总觉得不踏实。