Я довольно новичок в delphi, и я продолжаю получать нарушения доступа, когда пытаюсь получить доступ к массиву «nieuwButtons». Кто-нибудь знает, что я делаю неправильно?Продолжайте получать нарушение доступа при попытке доступа к массиву
unit UGeneral;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.DBGrids, SMDBGrid,
KJSMDBGrid, Vcl.ExtCtrls, KJPanel, Vcl.StdCtrls, Vcl.Mask, Vcl.DBCtrls,
Data.DB;
type
TGeneral = class(TObject)
private
{ Private declarations }
public
nieuwButtons: array of TButton;
nieuwButtonsDataSource: array of TDataSource;
procedure listEdits(x, y: Integer; owner: TComponent; parent: TWinControl;
source: TDataSource);
procedure nieuwClick(Sender: TObject);
{ Public declarations }
end;
var
General: TGeneral;
implementation
procedure TGeneral.nieuwClick(Sender: TObject);
var
i: Integer;
begin
for i := 0 to Length(nieuwButtons) - 1 do
begin
if (nieuwButtons[i] = Sender) then
begin
nieuwButtonsDataSource[i].DataSet.Insert;
end;
end;
end;
procedure TGeneral.listEdits(x, y: Integer; owner: TComponent;
parent: TWinControl; source: TDataSource);
var
i: Integer;
edit: TDBEdit;
_label: TLabel;
biggestWidth: Integer;
button: TButton;
edits: array of TDBEdit;
index: Integer;
begin
if nieuwButtons <> nil then //I get an access violation here
begin
SetLength(General.nieuwButtons, 0);
SetLength(nieuwButtonsDataSource, 0);
end;
index := Length(nieuwButtons);
SetLength(nieuwButtons, index + 1);
SetLength(nieuwButtonsDataSource, index + 1);
button := TButton.Create(owner);
button.parent := parent;
button.Top := y;
button.Left := x;
button.Caption := 'Nieuw';
button.OnClick := nieuwClick;
nieuwButtons[index] := button;
nieuwButtonsDataSource[index] := source;
biggestWidth := 0;
SetLength(edits, source.DataSet.Fields.Count);
edit := TDBEdit.Create(owner);
for i := 0 to source.DataSet.Fields.Count - 1 do
begin
_label := TLabel.Create(owner);
_label.parent := parent;
_label.Caption := source.DataSet.Fields[i].FieldName;
_label.Top := ((i * 22) + 30 + y); // 22 = standaard(?) hoogte van edittext
_label.Left := x;
_label.Show;
if _label.Width > biggestWidth then
begin
biggestWidth := _label.Width;
end;
end;
i := 0;
for i := 0 to source.DataSet.Fields.Count - 1 do
begin
edit := TDBEdit.Create(owner);
edit.parent := parent;
edit.DataField := source.DataSet.Fields[i].FieldName;
edit.DataSource := source;
edit.Top := ((i * edit.Height) + 30 + y);
edit.Left := biggestWidth + 30;
edits[i] := edit;
edit.Show;
end;
end;
end.
Assigned бросает нарушение доступа также:/ – user2073973
Расположение предполагает что 'Self' является' nil'. Покажите, как вы вызываете 'listEdits'. –
General.listEdits (0, 0, Self, KJPanel4, DataModule2.bestemmingSource); – user2073973