ユーザーがコントロールをクリックしても無意味な場合は、コントロールを無効にするのが好きです。
特殊なケースの 1 つは、標準の最初、前、次、および最後のボタンをエミュレートする一連のカスタム メニュー ボタンですTDBNavigator。
ユーザーが最初のボタンをクリックすると、最初のボタンと前のボタンの両方が無効になります。
次にユーザーが次のボタンと前のボタンをクリックすると、基になるボタンはTDataSet以前と同じレコードに配置されますが、最初のボタンと前のボタンは両方とも有効なままです。
現在の実装は次のようになります。
NavigationFirstButton.Enabled := not DataSet.IsEmpty and not DataSet.Bof;
NavigationPriorButton.Enabled := not DataSet.IsEmpty and not DataSet.Bof;
NavigationNextButton.Enabled := not DataSet.IsEmpty and not DataSet.Eof;
NavigationLastButton.Enabled := not DataSet.IsEmpty and not DataSet.Eof;
BofEof現在のレコードが最初/最後のレコードになるかどうかを事前に知る必要があるため、ボタンを無効にする正しい方法ではありません。
IsFirstRecordそこで、 andIsLastRecordメソッドを使用してこれを書き直すことを考えました。
function IsFirstRecord(ADataSet: TDataSet): Boolean;
begin
Result := ADataSet.RecNo = 0;
end;
function IsLastRecord(ADataSet: TDataSet): Boolean;
begin
Result := ADataSet.RecNo = ADataSet.RecordCount - 1;
end;
最初のレコードが正しくないケースを見たことがあるので、これは良い考えではないと思いRecNo = 0ます。(つまり、フィルタリングされた TADSQuery)
と の信頼できる実装IsFirstRecordとはIsLastRecord? TDataSet現在のアーキテクチャを使用することは可能ですか?