1

私はDelphi7コードを使用して、ユーザーがタブを切り替える前に、タブに入力されたコメントが保存されていることを確認しています。

タブはにあり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ます。

私が間違っていることについて何か考えはありますか?

4

1 に答える 1

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.ModifiedDataSet がまたはモードTrueのときにフィールドの内容が変更されたときに に設定され、状態が に戻ったときに に設定されます。dsEditdsInsertFalsedsBrowse

于 2013-02-27T00:41:59.480 に答える