所以这是我的情况。我有一个表单(MainMenu)和一个框架(TestFrame)。TestFrame 显示在位于 MainMenu 的 TPanel 上。使用此代码:
frTestFrame := TfrTestFrame.Create(nil);
frTestFrame.Parent := plMain;
frTestFrame.Align := alClient;
frTestFrame.Visible := true;
TestFrame 显示正常,没有错误。TestFrame 上有几个 TEdit 框。MainMenu 上的 TButton 调用位于 TestFrame 中的过程来检查 TEdit 框文本属性是否为空。
procedure TfmMainMenu.tbCheckClick(Sender: TObject);
begin
frTestFrame.Check;
end;
TestFrame 上的这个函数应该遍历所有“TEdit”组件并使用函数 GetErrorData,如果 TEdit 的 text 属性为空,则该函数返回一个字符串。该字符串被添加到 TStringList 并在任何 TEdit 框为空时显示。
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......”我不知道为什么会发生这个错误。我只能假设框架可能没有被创建。任何帮助都会很棒。提前致谢。