我正在使用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
。
知道我做错了吗?
答案 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.Modified
或True
模式并且设置为dsEdit
时,当字段内容发生更改时, dsInsert
设置为False
当它的状态变回dsBrowse
时。