【问题标题】:Proper Validation on TPageControl in Delphi在 Delphi 中正确验证 TPageControl
【发布时间】:2013-03-01 04:51:33
【问题描述】:

我正在使用 Delphi 7 代码,以确保在用户切换选项卡之前已保存在选项卡上输入的 cmets。

标签位于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

知道我做错了什么吗?

【问题讨论】:

    标签: delphi validation tabs delphi-7


    【解决方案1】:

    可能有更好的方法来做你想做的事情。请改用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.Modified在DataSet处于dsEditdsInsert模式时字段内容发生变化时设置为True,当状态变回dsBrowse时设置为False

    【讨论】:

    • 谢谢@Ken White! :) 在您给出的第一个示例中,我需要将&lt;&gt; 设置为=,但这个概念有效!你是对的,更好的测试可以完美运行!非常感谢,
    • 是的,你是对的。对于您正在进行的测试,&lt;&gt; 确实应该是 =。我会为未来的读者修复它。谢谢。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 2021-12-17
    • 2013-12-18
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    相关资源
    最近更新 更多