Каким-то образом случайно смешивание TEdit.Text и TLabel.Caption работает без исключения? - PullRequest
5 голосов
/ 19 декабря 2011

Я работаю с динамическим созданием нескольких различных типов элементов управления и сохранением их в списке в фоновом режиме.Два таких элемента управления - это TEdit и TLabel.Все эти элементы управления являются подэлементами элемента управления TPanel.

Ну, я случайно перепутал 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, а данные TLabel.Caption в свойство TEdit.Text.Я озадачен тем, что это не вызвало исключения ... Единственное, что я могу догадаться, это то, что свойства TEdit.Text и TLabel.Caption просто так используют один и тот же адрес памяти между классами элементов управления.

Почему бы не дать нарушение доступа?

Ответы [ 2 ]

9 голосов
/ 19 декабря 2011

TEdit.Text происходит от TControl.Text, а TLabel.Caption - от TControl.Caption.Но посмотрите на объявление TControl:

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

Элемент управления, с которым связан некоторый текст, управляет им с помощью методов SetText и GetText.В зависимости от типа элемента управления они связаны либо со свойством Caption, либо со свойством Text.Из документации ,

Примечание: Элементы управления, отображающие текст, используют либо свойство Caption, либо свойство Text для указания значения текста.Используемое свойство зависит от типа элемента управления.Как правило, заголовок используется для текста, который отображается как заголовок или метка окна, а текст - для текста, который отображается как содержимое элемента управления.

1 голос
/ 19 декабря 2011

Они оба получены из класса управления, и оба свойства обращаются к значению через одно и то же значение

...