我有一個主窗體,使用下面的代碼來創建一個子窗體,當一個按鈕被點擊。要創建的表單(frmNewMember
)已從自動創建表單列表中刪除。德爾福 - AV錯誤時使用第二種形式
procedure TfrmMain.btnAddMemberClick(Sender: TObject);
var
NewMemberForm: TForm;
begin
NewMemberForm := TfrmNewMember.Create(Application);
try
NewMemberForm.ShowModal;
finally
NewMemberForm.Free;
end;
end;
AV在我嘗試在表單內創建的過程中嘗試使用組件時出現。例如:
procedure DoSomething;
begin
frmNewMember.edtPostcode.Text := 'TEST';
end;
這會產生一個讀取錯誤爲000003BC的AV。這是否發生,因爲我試圖訪問不存在的frmNewMember
的實例?我確信這有一個簡單的答案,但我已經遍佈整個地方搜索,似乎無法擺脫AV錯誤。
是的,正是因爲如此。你(幾乎可以肯定)訪問自動聲明的全局表單變量,它指的是nil(該表單不是自動創建的)。更好地從你的'DoSomething'過程向該表單類發展方法。 – TLama
@TLama感謝您的回覆。我如何參考我從主窗體創建的窗體?我需要將NewMemberForm變量傳遞給我的子表單嗎? – Babah254
@PeterVonča我現在明白了。謝謝你的幫助。事情很簡單,但我不明白它背後的邏輯。 'frmNewMember'取代了NewMemberForm,一切正常。 – Babah254