5

ユーザーがコントロールをクリックしても無意味な場合は、コントロールを無効にするのが好きです。

特殊なケースの 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現在のアーキテクチャを使用することは可能ですか?

4

1 に答える 1