[英]Delphi - AV error when using second form
當單擊一個按鈕時,我有一個使用以下代碼創建子窗體的主窗體。 要創建的表單( frmNewMember
)已從自動創建表單列表中刪除。
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錯誤。
這是你的問題:
frmNewMember
這是Delphi IDE(無)為您聲明的全局變量。 您從未分配過它,因此它仍然為零。 因此,訪問沖突。
您已經停止使用自動創建,這是正確的選擇。 下一步是清除這些無用的全局變量的代碼。 完成操作后,您將無法再次犯此錯誤。
您仍然需要將表單引用添加到該函數中。 但是現在您可以將其作為參數傳遞。 或使函數成為表格的方法。 這也使您的代碼變得更好,因此您將繼續獲勝。
我認為這個問題是VB的詛咒 。 添加了全局表單變量,以允許Delphi模仿VB的行為。 我們早就意識到VB在這方面很爛。 但是我們仍然剩下這些可怕的全局變量。
助手:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.