簡體   English   中英

Delphi:繼承的創建給出訪問沖突

[英]Delphi: inherited Create gives Access violation

我做了一個應用程序,它打開了其他幾個 Forms 來處理任務。 所有 forms 工作正常,除了一個。 我對所有 forms 使用相同的代碼。 就像是:

FormTypeA:= TFormTypeA.Create(Application);

在 Create 構造函數中,我添加了一些代碼來初始化表單。 它包含如下行:

constructor TFormTypeA.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  more code ...
end;

就行“繼承的Create(AOwner);” 我收到訪問沖突:“Project ThisApplication.exe 引發異常 class $C0000005 並帶有消息‘c0000005 ACCESS_VIOLATION’

我根本不知道在哪里查看我的代碼來解決問題。 正如我所寫,其他 forms 使用相同的結構並且工作正常。

任何建議都會非常受歡迎。

好的。 這就是發生的事情。

在設計這個特定的表單時,我使用了幾個 TGridPanel。 這些面板由列和行組成。 由這個網格創建的單元格可以用 VCL 對象填充。 一旦您將這些對象放在表單上,您就必須將它們繪制到所需的 GridPanel。 之后,您必須通過在 object 檢查器中鍵入所需的行和列來指定正確的單元格。

到目前為止,一切都很好。

一旦您下定決心並想更改某些 object 的單元格 position,這種工作方式就會變得不那么結構化。 對象轉移到下一個 position,但這並不總是免費的,所以它們也會轉移,所以事情很快就會變得混亂。

為避免這種情況,您可以使用表單的文本版本。 如何? 右鍵單擊表單並選擇以文本形式查看。 Go 到正確的位置並進行更正。 完成后,再次右鍵單擊並選擇以表單形式查看。

這種工作方式存在風險,那就是:錯字

許多會被編譯器捕獲,但不是這個:

ControlCollection = <
  item
    Column = 0
    Control = SomeControlA
    Row = 0
  end
  item
    Column = -1  <------ Fatal!
    Row = 0
  end
  item
    Column = 0
    Control = SomeControlB
  end
end>

致命線是列(或行)的負值。 這很明顯。 沒有負列號。 這就是您編寫代碼時發生的情況。

如果您返回表單,則不會收到錯誤或警告。 編譯的時候? 安靜。 但是跑步? “異常 class $C0000005 帶有消息‘c0000005 ACCESS_VIOLATION”

我知道,每個人都會打錯字。 這個很惡心

我花了很長時間才發現這一點。 我希望這個描述對其他人有幫助。

暫無
暫無

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

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