界面上有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;

解决方案 »

  1.   

    在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;
      

  2.   

    设置TEdit的NumbersOnly属性为True就OK了。
      

  3.   

    设置TEdit的NumbersOnly属性为True就OK了。
      

  4.   

    IDE的功能:1.你按住Ctrl可以框选所有edit,一次没有选到的再按shift来加选。
    2.全部选好后,按F11显示属性栏,在OnKeyPress事件中填入你的myKeyPress。注: 第二步实际上就是操作所有edit了。
      

  5.   

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

  6.   

    在一个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
      

  7.   

    如1L,自定义事件,在需要时把Edit的相应事件指向自定义事件。
    当然,如果版本支持3L和4L所说的属性设置那更方便了
      

  8.   

    使用元件偷梁换柱法(原理见我的文章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;
      

  9.   

    上面的代码把退格键也屏蔽了,可改为:
    procedure TEdit.WMChar(var Message: TWMChar);
    begin
      if ((Message.CharCode >= 48) and (Message.CharCode <= 57)) or
        (Message.CharCode = VK_BACK) then
        inherited;
    end;