これが私の状況です。Form (MainMenu) と Frame (TestFrame) があります。TestFrame は、MainMenu にある TPanel に表示されます。このコードの使用:
frTestFrame := TfrTestFrame.Create(nil);
frTestFrame.Parent := plMain;
frTestFrame.Align := alClient;
frTestFrame.Visible := true;
TestFrame はエラーなしで正常に表示されます。TestFrame にはいくつかの TEdit ボックスがあります。MainMenu の TButton は、TestFrame にあるプロシージャを呼び出して、TEdit ボックスのテキスト プロパティが null かどうかをチェックします。
procedure TfmMainMenu.tbCheckClick(Sender: TObject);
begin
frTestFrame.Check;
end;
TestFrame のこの関数は、すべての「TEdit」コンポーネントを通過し、TEdit の text プロパティが null の場合に文字列を返す関数 GetErrorData を使用することになっています。その文字列は TStringList に追加され、TEdit ボックスが null の場合に表示されます。
function TfrTestFrame.Check: Boolean;
var
ErrorList: TStringList;
ErrorString: string;
I: Integer;
begin
ErrorList := TStringList.Create;
for I := 0 to (frTestFrame.ComponentCount - 1) do
begin
if (frTestFrame.Components[I] is TEdit) then
begin
ErrorString := GetErrorData(frTestFrame.Components[I]);
if (ErrorString <> '') then
begin
ErrorList.Add(ErrorString);
end;
end;
end;
if (ErrorList.Count > 0) then
begin
ShowMessage('Please Add The Following Information: ' + #13#10 + ErrorList.Text);
result := false;
end;
result := true;
end;
function TfrTestFrame.GetErrorData(Sender: TObject): string;
var
Editbox: TEdit;
ErrorString: string;
begin
if (Sender is TEdit) then
begin
Editbox := TEdit(Sender);
if (Editbox.Text <> '') then
begin
Editbox.Color := clWindow;
result := '';
end
else
begin
Editbox.Color := clRed;
ErrorString := Editbox.Hint;
result := ErrorString;
end;
end;
end;
問題は、「for I := 0 to (frTestFrame.ComponentCount - 1) do」という行にヒットすると、爆発し、「0x00458 でのアクセス違反...アドレス 0x000 の読み取り...」というエラーが表示されることです。このエラーが発生する理由がわかりません。フレームが作成されていない可能性があるとしか思えません。どんな助けでも素晴らしいでしょう。前もって感謝します。