2011-12-18 7 views
5

मैं गतिशील रूप से कई अलग-अलग प्रकार के नियंत्रण बनाने और पृष्ठभूमि में एक सूची में संग्रहीत करने के साथ काम कर रहा हूं। ऐसे दो नियंत्रण एक TEDIT और एक TLabel हैं। ये नियंत्रण एक टीपीनल नियंत्रण के सभी उप-नियंत्रण हैं।किसी भी तरह गलती से TEdit.Text और TLabel.Caption मिश्रण अपवाद के बिना काम करता है?

खैर मैंने गलती से ऊपर TEdit TLabel के साथ मिश्रित जब TPanel.Controls से पढ़ (उन्हें गलत अनुक्रमणिका से मिल गया) जब TEdit.Text और TLabel.Caption गुण के लिए लिख। किसी भी तरह, यह भी कोई अपवाद नहीं उठाया।

यह TLabel(SomeEditControl).Caption:= 'This is a label control'; और TEdit(SomeLabelControl).Text:= 'This is an edit control'; की तरह कुछ करता है और यह TEdit.Text संपत्ति में TLabel.Caption संपत्ति में TEdit.Text डेटा, और TLabel.Caption डेटा डालता है। मुझे परेशान है कि इसने अपवाद नहीं उठाया ... केवल एक चीज जिसे मैं अनुमान लगा सकता हूं वह यह है कि TEDit.Text और TLabel.Caption गुण नियंत्रण कक्षाओं के बीच समान स्मृति पते का उपयोग करने के लिए होते हैं।

यह एक्सेस उल्लंघन क्यों नहीं देगा?

+0

वे सब उतर मुलाकात 'TControl' जो एक' WindowText' संपत्ति है से। ( बस अनुमान लगा रहा है ...) –

+0

@AndreasRejbrand यह एक अच्छी संभावना है, TEDit.Text और TLabel.Caption मुझे लगता है कि विंडोटेक्स्ट –

+0

पर अनुवाद करना सही है। निचे देखो। –

उत्तर

9

TEdit.TextTControl.Text से आता है, और TLabel.CaptionTControl.Caption से आता है। लेकिन TControl की घोषणा को देखो:

... 
property Caption: TCaption read GetText write SetText stored IsCaptionStored; 
... 
property Text: TCaption read GetText write SetText; 
... 

एक नियंत्रण के साथ यह SetText और GetText विधियों के माध्यम से यह प्रबंधन करता जुड़े कुछ पाठ है। नियंत्रण के प्रकार के आधार पर, ये या तो Caption या Text संपत्ति से जुड़े हुए हैं। documentation से,

नोट: नियंत्रण है कि पाठ उपयोग या तो कैप्शन संपत्ति या पाठ संपत्ति को प्रदर्शित पाठ मान निर्दिष्ट करने के लिए। उपयोग की जाने वाली संपत्ति नियंत्रण के प्रकार पर निर्भर करती है। आम तौर पर, कैप्शन का उपयोग टेक्स्ट के लिए किया जाता है जो कि विंडो शीर्षक या लेबल के रूप में दिखाई देता है, जबकि टेक्स्ट के लिए टेक्स्ट का उपयोग किया जाता है जो नियंत्रण की सामग्री के रूप में दिखाई देता है।

+3

कोई 'FText' नहीं है, यह' WM_GETTEXT' है, +1 –

+0

या 'WM_SETTEXT' उन गुणों के लिए एक सेटटर के रूप में है। +1, आप तेज़ थे;) – TLama

+0

@ डेविड: दरअसल, वहां * एक 'FText' है। 'SetText' पर एक नज़र डालें। (लेकिन फिर भी, आप सही हैं। मुख्य भाग इन संदेशों पर आधारित प्रतीत होता है।) –

1

वे दोनों नियंत्रण वर्ग से प्राप्त कर रहे हैं और दोनों गुण मूल्य का उपयोग एक ही माध्यम से

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