在Delphi中对TPageControl进行适当的验证

时间:2013-02-27 00:25:17

标签: delphi validation tabs delphi-7

我正在使用Delphi 7代码,以确保在用户可以切换标签之前保存在选项卡上输入的注释。

标签位于TPageControl,此代码会被触发OnExit

procedure TfCallerInfo.tsChaplainExit(Sender: TObject);
begin
  { Compare the saved DB value with the text in the comments field }
  if (dmMain.qChaplainCOMMENTS.AsString <> dbmChapComments.Text) then
    begin
      ShowMessage ('Please save the comments before proceeding.');
      pcDetail.ActivePage := tsChaplain;      // Remain on the Current Page
      tsChaplain.SetFocus;
    end;
end;

例如,当用户点击另一个标签tsInfoRequest时,验证会触发,但有效网页会变为tsInfoRequest,而不是保留tsChaplain

知道我做错了吗?

1 个答案:

答案 0 :(得分:9)

可能有更好的方法来做你想做的事情。请改用TPageControl.OnPageChanging事件。

procedure TfCallerInfo.pcDetailPageChanging(Sender: TObject; 
  NewPage: TTabSheet; var AllowChange: Boolean);
begin
  if pc.ActivePage = tsChaplain then
  begin
    AllowChange := (dmMain.qChaplainCOMMENTS.AsString = dbmChapComments.Text);
    if not AllowChange then
      ShowMessage(...);
  end;
end;

顺便说一下,更好的测试可能是

AllowChange := not dmMain.gChaplainCOMMENTS.Modified;
当数据集的数据集处于TField.ModifiedTrue模式并且设置为dsEdit时,当字段内容发生更改时,

dsInsert设置为False当它的状态变回dsBrowse时。