Есть такой код.
unit UnitMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.Grids, Vcl.DBGrids,
DBConnection, Vcl.StdCtrls;
type
TFormMain = class(TForm)
DBGrid1: TDBGrid;
SelectedId: TLabel;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure GetIdFromSelectedRow(DataSet: TDataSet);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormMain: TFormMain;
implementation
{$R *.dfm}
procedure TFormMain.Button1Click(Sender: TObject);
begin
DBGrid1.DataSource.DataSet.AfterScroll := GetIdFromSelectedRow;
end;
procedure TFormMain.FormCreate(Sender: TObject);
begin
DBGrid1.DataSource.DataSet.AfterScroll := GetIdFromSelectedRow;
end;
procedure TFormMain.GetIdFromSelectedRow(DataSet: TDataSet);
begin
SelectedId.Caption := DataSet.FieldByName('id').AsString;
end;
end.
Он выдает вот такую ошибку:
![5d0f6ef3022af919991346.png](https://habrastorage.org/webt/5d/0f/6e/5d0f6ef3022af919991346.png)
Если не закомментировать действие при создании формы:
procedure TFormMain.FormCreate(Sender: TObject);
begin
DBGrid1.DataSource.DataSet.AfterScroll := GetIdFromSelectedRow;
end;
Но при нажатии кнопки этот код работает и не выдает никаких ошибок.
Почему так? Мне нужно выполнять этот код именно при старте приложения. Как обойти эту ошибку? Я пробовал sleep, но это не помогло.