我想动态的定义edit控件的onenter,onexit事件,但是直接设置不行
    Edit_money.OnEnter:=Edit_moneyEnterYuan;//Edit_moneyEnterYuan是一个过程

解决方案 »

  1.   

    Edit_moneyEnterYuan过程的参数必须和OnEnter事件需要的参数一致,定义成类似下面这样的就可以了
    procedure TForm1.Edit_moneyEnterYuan(Sender: TObject);
    beginend;
      

  2.   

    没错,我就是这样定义的
    procedure Edit_moneyEnterYuan(Sender: TObject);
    begin
      Tedit(sender).Text := FloatStrTostrExtYuan(Tedit(sender).Text)
    end;
      

  3.   

    规范一点的办法是继承一下TEdit,自己写一个带着两个时间的TXXXEdit,赋值这句可以写在覆盖的create里面最简单的就只要在用到这个edit的form的oncreate事件里赋值就可以了
      

  4.   

    我的窗体上只有一个需要这样处理的edit控件,其他的edit需要另外处理,我该怎么班
      

  5.   

    跟其他无关,就把需要处理的这个edit的事件赋值一下就可以了
      

  6.   

    这个,还要代码? TForm1=class(TForm)
     private  
       procedure myEditEnter(Sender: TObject);
       procedure myEditExit(Sender: TObject);
    end;
    ...
    ...
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      edit1.OnEnter:=myEditEnter;
      edit1.OnExit:=myEditExit;
      //edit2、edit3……editn不管
    end;procedure TForm1.myEditEnter(Sender: TObject);
    begin
      //……
    end;procedure TForm1.myEditExit(Sender: TObject);
    begin
      //……
    end;
      

  7.   

    你写的不能用
    我再说一遍我的目的
    我要在尽可能小的代码该动量下,使该edit控件的onenter,onexit,onkeypress事件支持两种用法
    这就是我问这个问题的原因
      

  8.   

    怎么会不能用呢?至于你的目的,响应事件还是可以同一个,在事件里面做不同行为的处理,不行吗?当然,每个动作都非得要写两个事件,也可以,你至少会有一个地方在转换动作,转换时候切换一下就行了,重新赋值一下嘛如下,假设用checkbox来选择,我这里先取某个动作为默认TForm1=class(TForm)
        ...
        ...
     private  
       procedure myEdit1Enter(Sender: TObject);
       procedure myEdit2Enter(Sender: TObject);
       procedure myEditExit(Sender: TObject);
    end;
    ...
    ...
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      edit1.OnEnter:=myEdit1Enter;
      edit1.OnExit:=myEditExit;
      //edit2、edit3……editn不管
    end;procedure TForm1.CheckBox1Click(Sender: TObject);
    begin
      if checkbox1.checked then 
         edit1.OnEnter:=myEdit1Enter
      else
         edit1.OnEnter:=myEdit2Enter;end;procedure TForm1.myEdit1Enter(Sender: TObject);
    begin
      //……
    end;procedure TForm1.myEdit2Enter(Sender: TObject);
    begin
      //……
    end;procedure TForm1.myEditExit(Sender: TObject);
    begin
      //……
    end;
      

  9.   

    我不动原来的代码,因为这样的代码有很多,如果按照上面所说的,我的改动量会很大
    可能我说的不清楚,我再说一边:
    edit编辑框的onenter,onexit,onkeypress三个事件,原来有一套用法,现在我想用另一套
    方法来实现对输入,显示的控制,所以我有一个专门的函数来获取一个状态值,但是我不可能在
    onkeypress中每次都访问这个状态值(那样影响效率,磁盘io),所以只能通过在窗体创建时
    对edit编辑框的onenter,onexit,onkeypress三个事件进行动态赋值,这样就不用每次都访问
    那个状态值了
    我应该怎样设置才能成功,一下时我的代码:
    //函数
    procedure Edit_moneyKeyPressYuan(Sender: TObject; var Key: Char);
    begin
        key := Edit_KeyPassDotYuan(key,trim(tedit(sender).Text));
    end;
    //调用代码
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     edit1.OnKeyPress:=edit_moneykeypressyuan;
    end;总是提示错误:
      

  10.   

    没错呀!
    我不知道你的Edit_KeyPassDotYuan函数是怎么定义的,
    所以我就用了个‘a’代替
    这样是没错的,不管你输入的是什么键,都显示'a'。procedure Edit_moneyKeyPressYuan(Sender: TObject; var Key: Char);
    begin
        key := 'a';
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     edit1.OnKeyPress:=edit_moneykeypressyuan;
    end;
      

  11.   

    谢谢各位大虾,我终于弄明白了,原理就像flyforlove(为情飞) 写的,只不过我做了一点修改
    我在一个公共单元中定义了一个类,在该类的private事件中声明三个函数,然后在要调用的单元里声明一个该类的实例,然后把edit的哦nenter,onpkeypress,onexit付给这个类的相应函数