窗体中仅有一个按钮,一个DBGRid,二个Edit,写有如下代码:
procedure TFm1.Edit1Exit(Sender: TObject);
begin
  Tb1.IndexFieldNames:='XHNo' ;
  if Tb1.FindKey([edit1.Text]) then
     begin
       edit1.SetFocus;
       showmessage('此序号已存在,请重新输入!');
     end;
end;问题:当我在edit1中输入一个表中重复的序号时,鼠标点击DBGrid滚动条时,消息框showmessage连续出来三次,而点DBGrid的其它地方,或点别的组件,都只出现一次消息框,找不到原因!谢谢

解决方案 »

  1.   

    這樣試試
    procedure TFm1.Edit1Exit(Sender: TObject);
    begin
      Tb1.IndexFieldNames:='XHNo' ;
      if Tb1.FindKey([edit1.Text]) then
         begin
           showmessage('此序号已存在,请重新输入!');
           edit1.SetFocus;
         end;
    end;
      

  2.   

    to  frogshero(三波萝) :你的方法我试过,同样出现相同的情形!
          请教高手!!!分不够再给!!!!
      

  3.   

    這樣試試
    procedure TFm1.Edit1Exit(Sender: TObject);
    begin
      Tb1.IndexFieldNames:='XHNo' ;
      if Tb1.FindKey([edit1.Text]) then
         begin
           showmessage('此序号已存在,请重新输入!');
        Edit1.Text:='';   //加上这句
           edit1.SetFocus;
         end;
    end;
      

  4.   

    procedure TFm1.Edit1Exit(Sender: TObject);
    begin
      Tb1.IndexFieldNames:='XHNo' ;
      if Tb1.FindKey([edit1.Text]) then
         begin
           edit1.SetFocus;
           showmessage('此序号已存在,请重新输入!');
         end;
    end;
    是因为Edit1.SetFocus的原因,因为你的焦点社在Edit1上后才显示Showmessage,那Edit1就失去焦点了,再次触发,你可以变成这样procedure TFm1.Edit1Exit(Sender: TObject);
    begin
      Tb1.IndexFieldNames:='XHNo' ;
      if Tb1.FindKey([edit1.Text]) then
         begin
           showmessage('此序号已存在,请重新输入!');
           edit1.SetFocus;
         end;
    end;我想就不会有这个问题了
      

  5.   

    上面的思路好象都不对,
    因为点其他地方可以呀,所以问题应在DBGRID上
      

  6.   

    procedure TFm1.Edit1Exit(Sender: TObject);
    begin
      Tb1.IndexFieldNames:='XHNo' ;
      if Tb1.FindKey([edit1.Text]) then
         begin
           showmessage('此序号已存在,请重新输入!');
           edit1.SetFocus;
           exit;
         end;
    end;试试如何
      

  7.   

    我没有时间仔细看VCL的代码,不过基本可以肯定的是,由于你点击的是滚动条,所以Delphi内部会响应很多消息,包括重新定位,重绘等等,造成Edit几次失去焦点。解决的办法,我个人认为不要把代码放在Edit的OnExit事件中做,等到保存时再去判断。
      

  8.   

    严重支持,最好在save按纽的onclick中,因为你也不知道这个时候发生了些什么事情
      

  9.   

    过客问一下“Tb1.IndexFieldNames:='XHNo' ;是什么意思啊”
      

  10.   

    楼主,试试:不要在Edit1Exit写,请在EDITONPRESSDOWN中写