[英]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.