ユーザーがコントロールをクリックしても無意味な場合は、コントロールを無効にするのが好きです。
特殊なケースの 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;
Bof
Eof
現在のレコードが最初/最後のレコードになるかどうかを事前に知る必要があるため、ボタンを無効にする正しい方法ではありません。
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
現在のアーキテクチャを使用することは可能ですか?