ON EXIT :当直接按存盘时候,并不触发;
ON CHANGE :每输入一个字符都触发,太烦琐了;
其他:    鼠标或者键盘变化时候,也不触发;谢谢大虾~

解决方案 »

  1.   

    procedure TGydlForm.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
    if key=#13 then
       begin
          key:=#0;
          perform(WM_NEXTDLGCTL,0,0);
       end;
    end;
      

  2.   

    本人经常用exit检测!先检测它的长度是否是0,是0不执行任何操作或者做你想做的操作,点存盘的时候更要执行这个检测啊?晕!如果你存盘里面也有这部分检测这无所谓的,你可以把一些小的操作做成一个独立的过程,总之,在exit的时候检测就OK,如果点了存盘的话还是要检测,不过可以做个标记,对标记进行标识究竟存盘的是否是合法信息!
    或者你也可以这样想想:在exit的过程里面判断activecontrol的名字是否是你要按存盘的那控件的名字!如果是就不用执行exit的那个所谓的检测了!如果不是就继续执行那个检测!
      

  3.   

    从我们编程人员的角度去看:在OnBeforPost中检验最好!这是肯定的!但问题用的毕竟是客户!你想想,如果你在这里检测的话,客户一时是很难感觉究竟是哪里有错误,就算你有提示了,这样还是没有在exit这个时候检测来的快!这是从人的反应速度上去考虑的!你难道没有在网上注册帐号吗?你不是点了确认后他才检测的吗?这样还要重新输入密码或者再次刷新等等等!不过你也可以考虑在Tedit控件的后面弄个检测的按钮,让客户去按!不过这样对网页的来说比较好,如果是这种form的话,感觉客户不想按这个按钮,因为他又要去移动鼠标并点击了!这样是很不爽的!
      

  4.   

    var 
      S :set of char;
      str :S;
    begin
      str = ['0'..'9',#8];
      if not(key in str)then
         key = #0;
    end;就可以了
      

  5.   

    在on exit事件里写比较好
    立即提示用户出错位置!
    如果在提交的时候检测,那就希望你提示出错信息后,
    把光标定位到出错的TEDIT里,方便用户
      

  6.   

    建议直接做在onkeypress里面,限制别人的输入,不符合条件的不给输入