窗体中仅有一个按钮,一个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的其它地方,或点别的组件,都只出现一次消息框,找不到原因!谢谢
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的其它地方,或点别的组件,都只出现一次消息框,找不到原因!谢谢
procedure TFm1.Edit1Exit(Sender: TObject);
begin
Tb1.IndexFieldNames:='XHNo' ;
if Tb1.FindKey([edit1.Text]) then
begin
showmessage('此序号已存在,请重新输入!');
edit1.SetFocus;
end;
end;
请教高手!!!分不够再给!!!!
procedure TFm1.Edit1Exit(Sender: TObject);
begin
Tb1.IndexFieldNames:='XHNo' ;
if Tb1.FindKey([edit1.Text]) then
begin
showmessage('此序号已存在,请重新输入!');
Edit1.Text:=''; //加上这句
edit1.SetFocus;
end;
end;
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;我想就不会有这个问题了
因为点其他地方可以呀,所以问题应在DBGRID上
begin
Tb1.IndexFieldNames:='XHNo' ;
if Tb1.FindKey([edit1.Text]) then
begin
showmessage('此序号已存在,请重新输入!');
edit1.SetFocus;
exit;
end;
end;试试如何