簡體   English   中英

Delphi-使用第二種形式時出現AV錯誤

[英]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在這方面很爛。 但是我們仍然剩下這些可怕的全局變量。


助手:

  • 局部變量也可以聲明為TfrmNewMember。
  • 因為您通過try / finally管理生活,所以沒有必要將Application傳遞給構造函數。 傳遞nil代替。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM