整个界面edit全部只能输入数字的问题【没分了。。】

a9605201 2011-06-01 06:14:21
能否让界面内的所有edit都只能输入数字?

如果每个edit都处理下KeyPress事件,太麻烦了。

有没有一劳永逸的办法?
...全文
89 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
onlyou13 2011-06-02
  • 打赏
  • 举报
回复
楼上组件就没有必要动态创建了

可以遍历所有控件,如果是TEdit类的话,给其加一个onKeyPress事件就行。


FormCreate里

for i := 0 to ComponentCount - 1 do
begin
if Components[i] is TEdit then
(Components[i] as TEdit).OnKeyPress := myKeyPress;
end;
yqdragon 2011-06-01
  • 打赏
  • 举报
回复
都处理下也没那么麻烦啊,多点点鼠标而已
想统一动态创建好了
  private
edt:array of TEdit;
num:integer;
procedure CreateEdit(Num:integer);
procedure MyKeyPress(Sender: TObject; var Key: Char);

{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.CreateEdit(Num:integer);
var
i:integer;
begin
if Num> 0 then
begin
setLength(edt,Num);
for i:=0 to Num-1 do
begin
Edt[i]:=TEdit.create(self);
Edt[i].parent:=self;
Edt[i].Name:='Edt'+inttostr(i);
Edt[i].text:=Edt[i].Name;
Edt[i].Height:= 18;
Edt[i].Width:=300;
Edt[i].left := 100;
Edt[i].top := 30*i+10;
Edt[i].onKeyPress:=MyKeyPress;
end;
end;
end;


procedure TForm1.MyKeyPress(Sender: TObject;var Key:Char);
begin
if not (Key in ['0'..'9', #8, #13]) then
Key := #0;
end;


procedure TForm1.FormShow(Sender: TObject);
begin
num := 10;
CreateEdit(num);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i:integer;
begin
for i:= 0 to num-1 do
edt[i].Free;
end;
onlyou13 2011-06-01
  • 打赏
  • 举报
回复
要么就自定义组件
onlyou13 2011-06-01
  • 打赏
  • 举报
回复
同意楼上
s11ss 2011-06-01
  • 打赏
  • 举报
回复
实现了Edit1的OnKeyPress事件Edit1KeyPress以后,再给Edit2, Edit3等等都指定它们的OnKeyPress事件为Edit1KeyPress就行了

830

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧