来一个大家都会的。。。

haochin 2010-03-02 12:23:06
界面上有N个edit

我想让每个edit都只能输入 0-9的数字,我又不想在每个edit的keypress里写代码,
我想做成一个过程,每个edit的keypress里调用这个过程就可以了。
要如何做啊?

目前我的判断代码:


procedure TForm1.edt1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9']) then
begin
Key := #0;
end;
end;
...全文
188 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
sforiz 2010-03-03
  • 打赏
  • 举报
回复
方法还真多、、、、、、、、、、、、、、、、
阿发伯 2010-03-03
  • 打赏
  • 举报
回复
上面的代码把退格键也屏蔽了,可改为:
procedure TEdit.WMChar(var Message: TWMChar);
begin
if ((Message.CharCode >= 48) and (Message.CharCode <= 57)) or
(Message.CharCode = VK_BACK) then
inherited;
end;
阿发伯 2010-03-03
  • 打赏
  • 举报
回复
使用元件偷梁换柱法(原理见我的文章http://blog.csdn.net/maozefa/archive/2007/08/06/1728621.aspx):


type
TEdit = class(StdCtrls.TEdit)
private
procedure WMChar(var Message: TWMChar); message WM_CHAR;
end;

TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TEdit }

procedure TEdit.WMChar(var Message: TWMChar);
begin
if (Message.CharCode >= 48) and (Message.CharCode <= 57) then
inherited;
end;
haochin 2010-03-03
  • 打赏
  • 举报
回复
还有没有?
。。。。。。
modaoshi3002 2010-03-02
  • 打赏
  • 举报
回复
IDE的功能:

1.你按住Ctrl可以框选所有edit,一次没有选到的再按shift来加选。
2.全部选好后,按F11显示属性栏,在OnKeyPress事件中填入你的myKeyPress。

注: 第二步实际上就是操作所有edit了。
huangheguyun 2010-03-02
  • 打赏
  • 举报
回复
设置TEdit的NumbersOnly属性为True就OK了。
JPEXE 2010-03-02
  • 打赏
  • 举报
回复
设置TEdit的NumbersOnly属性为True就OK了。
dd_zhouqian 2010-03-02
  • 打赏
  • 举报
回复
也可以再事件里指向其他控件的事件

火龙岛主 2010-03-02
  • 打赏
  • 举报
回复
在OnCreate里写
var
i: integer;
begin
for i := 0 to ComponentCount - 1 do
if Components[i] is TEdit then
TEdit(Components[i]).OnKeyPress := myKeyPress;
//......
end;

//记得在类中声明
procedure TForm1.myKeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9']) then
begin
Key := #0;
end;
end;
静远 2010-03-02
  • 打赏
  • 举报
回复
如1L,自定义事件,在需要时把Edit的相应事件指向自定义事件。
当然,如果版本支持3L和4L所说的属性设置那更方便了
静远 2010-03-02
  • 打赏
  • 举报
回复
引用 7 楼 liuzemin 的回复:
学习了

“设置TEdit的NumbersOnly属性为True就OK了。”
请注明版本,在D7中无此属性

D2005中也不见有~
haochin 2010-03-02
  • 打赏
  • 举报
回复
呵呵,如此一个小小问题居然有这么多的解决办法。。

简单的,复杂的,技术型的,技巧型的。。。

不错。学习了。。。

楼下还有没有其他的新鲜方法?
休闲中 2010-03-02
  • 打赏
  • 举报
回复
引用 8 楼 saibeistar 的回复:
在一个EDIT控件上写KeyPress事件
procedure TForm1.edt1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (key in ['0'..'9']) then
  begin
    Key := #0;
  end;
end;


其他的EDIT的KeyPress都引用edt1KeyPress

这个比较简单容易实现!
tjj5203 2010-03-02
  • 打赏
  • 举报
回复
引用 1 楼 smallhand 的回复:
Delphi(Pascal) code在OnCreate里写var
i: integer;beginfor i :=0to ComponentCount-1doif Components[i] is TEditthen
TEdit(Components[i]).OnKeyPress := myKeyPress;//......end;//记得在类中声明procedure TForm1.myKeyPress(Sender: TObject;var Key: Char);beginifnot (keyin ['0'..'9'])thenbegin
Key := #0;end;end;

UP
SaibeiStar 2010-03-02
  • 打赏
  • 举报
回复
在一个EDIT控件上写KeyPress事件
procedure TForm1.edt1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9']) then
begin
Key := #0;
end;
end;


其他的EDIT的KeyPress都引用edt1KeyPress
liuzemin 2010-03-02
  • 打赏
  • 举报
回复
学习了

“设置TEdit的NumbersOnly属性为True就OK了。”
请注明版本,在D7中无此属性
22222bbb 2010-03-02
  • 打赏
  • 举报
回复
小问题也能看出多种做法,学了!

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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