Delphi 如何用TSpeedButton替换TDBNavigator?

Delphi 如何用TSpeedButton替换TDBNavigator?,delphi,delphi-7,delphi-xe2,delphi-2010,delphi-10.2-tokyo,Delphi,Delphi 7,Delphi Xe2,Delphi 2010,Delphi 10.2 Tokyo,我做到了: 它可以工作,但问题是当我点击按钮到达最后一条记录时,按钮没有被禁用,就像在TDBNavigator中一样 我是如何使TSpeedButton像TDBNavigator一样自动禁用和启用的?在表单上放置一个战术列表,并向其添加标准数据集操作。将这些操作连接到数据集,将SpeedButton连接到相应的操作。这些标准操作将根据当前数据集状态处理启用状态。这里有一个简单的解决方案,非常适合我 我有一个表单frmMain、dataset dsWork、datasource srcWork、g

我做到了:

它可以工作,但问题是当我点击按钮到达最后一条记录时,按钮没有被禁用,就像在TDBNavigator中一样


我是如何使TSpeedButton像TDBNavigator一样自动禁用和启用的?

在表单上放置一个战术列表,并向其添加标准数据集操作。将这些操作连接到数据集,将SpeedButton连接到相应的操作。这些标准操作将根据当前数据集状态处理启用状态。

这里有一个简单的解决方案,非常适合我

我有一个表单frmMain、dataset dsWork、datasource srcWork、grid和两个speedbutton btnNext和btnPrior。重要的部分是TDataSource的OnDataChange事件。以下是源代码:

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  DataTable.qOrders.Next;
end;

只需在button last事件中禁用button next事件
unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, DBTables, StdCtrls, ExtCtrls;

type
  TfrmMain = class(TForm)
    btnNext: TButton;
    srcWork: TDataSource;
    dsWork: TTable;
    btnPrior: TButton;
    grdWork: TDBGrid;
    procedure btnNextClick(Sender: TObject);
    procedure btnPriorClick(Sender: TObject);
    procedure srcWorkDataChange(Sender: TObject; Field: TField);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.btnNextClick(Sender: TObject);
begin
   if not dsWork.Eof then dsWork.Next;
end;

procedure TfrmMain.btnPriorClick(Sender: TObject);
begin
   if not dsWork.Bof then dsWork.Prior;
end;

procedure TfrmMain.srcWorkDataChange(Sender: TObject; Field: TField);
begin
   btnNext.Enabled := not dsWork.Eof;
   btnPrior.Enabled := not dsWork.Bof;
end;

end.