我用的是cxDBEdit,我现在整个表单已经能够实现按回车或TAB向下一控件跳的功能..
但我现在要实现的是控件指定只能输入9.9或是99.999以内的数字,小数位可变,输完后自动跳到下一控件,有人可以实现不?或是需要MASKEDIT???
有人用过foxPro的就知道,FOXPRO的EDIT 有设置9.99这样的INPUTMASK属性,只能输入数字,然后输完会自动跳出该控件到下一控件,请问大家有人有实现过这样的功能不??非常感谢
但我现在要实现的是控件指定只能输入9.9或是99.999以内的数字,小数位可变,输完后自动跳到下一控件,有人可以实现不?或是需要MASKEDIT???
有人用过foxPro的就知道,FOXPRO的EDIT 有设置9.99这样的INPUTMASK属性,只能输入数字,然后输完会自动跳出该控件到下一控件,请问大家有人有实现过这样的功能不??非常感谢
解决方案 »
- 请问Inno Setup 5使用说明
- 关于DBGRIDEH插入列赋值的问题
- 请问怎么读取出PE文件的指定地址的16进制?
- 在事件MouseDown中的TMouseButton类型使用出问题!!急!!
- 紧急求教----请问书店的图书管理系统和防盗系统(磁处理)一套价格是多少?开发周期多长?磁处理使用的是贴磁条,还是其他方法?
- 在线等 请问誰有TeamSource的序列号
- 我的小问题,看看......
- 急!!!请帮我
- messagebox的显示位置问题
- 如何在form2中调用form1中的过程procedure?(form1和form2分属两个unit)
- 客户端插入ACCESS数据库的问题
- 一个新手求Delphi中打开、存储word的实例!!
var
i,j,len:integer;
begin
j:=length(s);
len:=j;
for i:=len downto 1 do
if s[i]='.' then
begin
j:=i;
break;
end;
result:=len-j;
end;procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key in ['0'..'9'] then
begin
if GetNumDotAfter(edit1.Text)<1 then
exit else edit2.SetFocus;
end else if key=#8 then exit else
if key='.' then
if edit1.Text='' then
key:=#0
else begin
if Pos('.',edit1.Text)>0 then
key:=#0 else exit;
end else key:=#0;
end;
不能单代码去写下个控件得到焦点,因为控件会很多,这样写会晕死了,有没什么办法不要一个个控件去写的?看来EDIT是没有MASK功能了,可能只能用MASKEDIT,但MASKEDIT设置了输入格式后也不会自动往下跳呀...怎样在写最少的代码的情况下实现呢?而且小数位要能够让自己去设置..是几个小数位,几个整数位..
不能单代码去写下个控件得到焦点,因为控件会很多,这样写会晕死了,有没什么办法不要一个个控件去写的?看来EDIT是没有MASK功能了,可能只能用MASKEDIT,但MASKEDIT设置了输入格式后也不会自动往下跳呀...怎样在写最少的代码的情况下实现呢?而且小数位要能够让自己去设置..是几个小数位,几个整数位..
现在我把整个单元给你放上来,当然我仅仅使用了3个edit进行测试,更多的你自己找找,我最烦不结贴的人了,注意结贴呀
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Procedure NumEditKeyPress(Sender:TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
function GetNumDotAfter(S:string):integer;//得到小数点后有几位小数
var
i,j,len:integer;
begin
j:=length(s);
len:=j;
for i:=len downto 1 do
if s[i]='.' then
begin
j:=i;
break;
end;
result:=len-j;
end; function GetNextEditName(EditName:string):string;
var //取得下一个edit控件的名称
i:integer;
begin //假设所有的edit控件名称都是'edit'+一个数字
delete(editname,1,4);//把前面的4个字符即edit删除掉剩下的就是数字了
result:='Edit'+inttostr(strtoint(editname)+1);
end;procedure TForm1.NumEditKeyPress(Sender: TObject; var Key: Char);
var
NextEditName:string;
NextComponent:TComponent;
begin
if key in ['0'..'9'] then
begin
if GetNumDotAfter((Sender as TEdit).text) <1 then
exit else
begin
NextEditName:=GetNextEditName((Sender as TEdit).name);
NextComponent:=Form1.FindComponent(NextEditName);
if NextComponent<>nil then
(NextComponent as TEdit).SetFocus;
end;
end else if key=#8 then exit else
if key='.' then
if edit1.Text='' then
key:=#0
else begin
if Pos('.',(Sender as TEdit).text)>0 then
key:=#0 else exit;
end else key:=#0;
end;end.
var E:Extended;
begin
if not TryStrtofloat(edit1.Text ,E) then
MessageBox(self.Handle,'请输入数值','提示',64);
end;
这个就可以了.
TAB功能我就不清楚了/