2012-12-14 6 views
7

मेरे पास एक वस्तु है जो TFrame से फैली हुई है। इसमें एक टीकंबोबॉक्स है।मेरे विनाशक को चलाने का मौका मिलने से पहले मेरी टीएसट्रिंग ऑब्जेक्ट को क्यों नष्ट किया जा रहा है?

मैं यह सुनिश्चित करना चाहता हूं कि जब मेरा फ्रेम नष्ट हो जाए तो मैं किसी भी संबंधित ऑब्जेक्ट को मुक्त कर दूं। हालांकि जब मेरा विनाशक चला जाता है तो मैं combobox तक पहुंच सकता हूं, लेकिन इसकी चीजें मिटा दी गई हैं।

यह क्या होगा? मैं विनाशक में वस्तुओं का उपयोग कैसे कर सकता हूं?

मेरा विनाशक इस तरह दिखता है;

destructor TfraImportAttachments.Destroy; 
begin 

    MessageDlg(IntToStr(cboCategory.Items.count), mtInformation, [mbOK], 0); 
    FreeObjects(cboCategory.Items); 

    inherited; 
end; 
+3

कुछ कोड दिखाएं। – Lloyd

+0

मेरा मुख्य रूप फ्रेम का मालिक है, जब ऑनडेस्ट्राय को मुख्य रूप के लिए बुलाया जाता है तो वस्तुएं मौजूद होती हैं, लेकिन फिर मेरा विनाशक निकाल दिया जाता है और वे चले जाते हैं। तो बीच में कुछ होना चाहिए। – srayner

+0

आईआरसी, फ्रेम के साथ सृजन और विनाश का कोई सटीक समय नहीं है - शायद यह मुद्दा है। – iamjoosy

उत्तर

11

एक DestroyHandle नाशक से पहले बता गया पहुंच चुके थे। फिर आइटम चले गए हैं क्योंकि वे सूची में TCustomComboBox.DestroyWnd में सहेजे नहीं गए हैं।

कंबोबॉक्स डेल्फी ऑब्जेक्ट अभी भी मौजूद है, लेकिन वास्तविक नियंत्रण (विंडो हैंडल के माध्यम से उपयोग किया जाने वाला एक) चला गया है। कॉम्बोबॉक्स तक पहुंचने से। यह लगता है कि वीसीएल वास्तविक नियंत्रण को पुन: प्राप्त करता है ताकि यह आइटम पुनर्प्राप्त कर सके, लेकिन उस नए नियंत्रण में कोई आइटम नहीं है, इसलिए Items.Count रिटर्न 0.

एक समाधान को कंबोबॉक्स में रखना होगा और एक TObjectList, TList या TList<TObject> जो आप उनके साथ करना चाहते हैं उसके आधार पर। तो स्वामित्व "कोड" सूची में है जबकि आइटम अभी भी combobox में संदर्भित हैं।

+1

धन्यवाद। मेरे पास कोड अब काम कर रहा है। – srayner

संबंधित मुद्दे