2011-12-18 4 views
5

Pracuję z dynamicznym tworzeniem wielu różnych typów kontrolek i przechowywaniem ich na liście w tle. Dwie z takich kontroli to TEdit i TLabel. Te kontrole są wszystkimi podrzędnymi kontrolami kontrolki TPanel.Jakoś przypadkowo mieszanie TEdit.Text i TLabel.Caption działa bez wyjątku?

Cóż, przypadkowo pomieszałem TEdit z TLabelem podczas odczytu z TPanel.Controls (otrzymałem je z niewłaściwych indeksów) podczas zapisu do właściwości TEdit.Text i TLabel.Caption. Jakoś nie podniosło to żadnego wyjątku.

To coś w rodzaju TLabel(SomeEditControl).Caption:= 'This is a label control'; i TEdit(SomeLabelControl).Text:= 'This is an edit control'; I umieszcza dane TEdit.Text we właściwości TLabel.Caption, a dane TLabel.Caption we właściwości TEdit.Text. Jestem zaskoczony, że to nie podniosło wyjątku ... Jedyne, co mogę się domyślić, to to, że właściwości TEdit.Text i TLabel.Caption tak samo używają tego samego adresu pamięci między klasami kontrolnymi.

Dlaczego nie miałoby to spowodować naruszenia zasad dostępu?

+0

Wszyscy pochodzą od 'TControl' który ma właściwość' WindowText'. ( Po prostu zgaduję ...) –

+0

@AndreasRejbrand Jest to dobra możliwość, TEdit.Text i TLabel.Caption Zakładam, że tłumaczę na WindowText –

+0

True. Zobacz poniżej. –

Odpowiedz

9

Numer TEdit.Text pochodzi z TControl.Text, a TLabel.Caption pochodzi z TControl.Caption. Ale spójrz na deklaracji TControl:

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

formantu, który ma jakiś tekst powiązany z nim zarządza nim za pośrednictwem metod SetText i GetText. W zależności od rodzaju kontroli są one powiązane z właściwością Caption lub Text. Z documentation,

Uwaga: Kontrole, które wyświetlają wykorzystanie tekstu albo właściwość Caption lub właściwość Text, aby określić wartość tekstową. Właściwość, która jest używana zależy od typu kontroli. Ogólnie rzecz biorąc, napis jest używany do tekstu , który pojawia się jako tytuł okna lub etykieta, natomiast Tekst jest używany do tekstu , który pojawia się jako treść formantu.

+3

Nie ma 'FText', to' WM_GETTEXT', +1 –

+0

Lub 'WM_SETTEXT' jako program ustawiający dla tych właściwości. + 1ed, byłeś szybszy;) – TLama

+0

@David: Właściwie tam * jest * 'FText'. Spójrz na 'SetText'. (Ale nadal masz rację, główna część wydaje się być oparta na tych wiadomościach.) –

1

Oni obaj pochodzący z klasy kontroli dostępu i obie właściwości wartość przez sam spotkał