如何限制TEdit控件中,Text的内容???(50分)

  • 主题发起人 主题发起人 php1
  • 开始时间 开始时间
P

php1

Unregistered / Unconfirmed
GUEST, unregistred user!
我用TEdit控件,但是需要限制用户输入的数据只能是real的。即除了数字、小数点和正负
号外,其他的都不接受用户的输入,并且响铃。
现在我的做法是在OnKeyPress事件中输入代码,但是总是觉得不太满意。
<h1>请问有没有一些比较好的实现方法?</h1>
前提是用TEdit控件。
 
用TEdit控件这样就不错了,还是改用TMaskEdit吧
 
我还不如你
我只是TRY...EXCEPT
不过,现在已经用别的控件了
 
自己改造Edit控件就行了。
如在其Text 的写方法中,加入
Try
StrToFloat(FText);
except
....
end;
 
在onchange中加入代码,之前记录原先的值,
判断新值的合法性(用try ... except...end;),不合法则回赋原先的值并响铃
 
>>前提是用TEdit控件。
那好象除了你的那种办法再没什么好的办法了,要是改写TEdit,也相当于用第三方控件了
 
如果实在不行,要用TMaskEdit控件,那么应该在哪里限制?
我看过EditMask属性好象不对?
 
好好看一下EditMask的相关帮助就可以搞定的,很简单的说.
 
你的办法挺好
 
我一直都是在edit的onkeypress中写程序来控制的,我觉得效果挺好的。
var p:integer; tp:TPoint;
begin
if key in ['0'..'9','+','-','.'] then
begin
if key in ['+','-'] then
begin
p:=pos('+',Edit1.Text)+pos('-',Edit1.Text);
if p>0 then key:=#0
else
begin
GetCaretPos(tp);
if tp.x>1 then key:=#0;
end;
end
else
if key='.' then
begin
p:=pos('.',Edit1.Text);
if p>0 then key:=#0;
end;
end
else if key>#31 then key:=#0;
 
改用TMASKEDIT才是最佳方法,为什么放着现成的不用,非得去为难自己呢?
 
Tmaskedit是一个好的解决方法!如果想不通的话就换一种死方法了,就是在EDIT的
ONCHANGE 或 ONENTER 事件中判断就行了!
 
多人接受答案了。
 
后退
顶部