Unterkomponten bei Komponentenerstellung
-
Hi,
ich hab folgendes Problem bei der Erstellung einer Komponente, welche von TCustomPanel abgeleitet ist (dient als Container) und auf der ein TEdit und ein TLabel plaziert werdensollen. Klappt so weit ganz gut, beide Objekte sind sichtbar und funktionsfähig. Ich kann auch Default-Werte im Konstruktor zuweisen, allerdings nur dort. Sobald ich in anderen Set/Get Methoden auf diese Pointer zugreifen will sind diese =Null. Über Components[iIndex] komm ich wiederrum dran.
Hier der Code:class PACKAGE TLookupEdit : public TCustomPanel { private: TEdit *oEdit; TLabel *oLabel; int FFieldSize; String FText; void __fastcall SetFieldSize(int value); int __fastcall GetFieldSize(); void __fastcall SetText(String value); String __fastcall GetText(); ...__fastcall TLookupEdit::TLookupEdit(TComponent* Owner) : TCustomPanel(Owner) { TEdit* oEdit = new TEdit((TComponent*)this); oEdit ->SetSubComponent(true); oEdit->Parent = this; oEdit->Visible = true; oEdit->MaxLength = 2; oEdit->Left = 0; oEdit->Top = 0; oEdit->Width = 24; this->Height = oEdit->Height; TLabel* oLabel = new TLabel(this); oLabel->SetSubComponent(true); oLabel->Parent = this; oLabel->Visible = true; oLabel->AutoSize = true; oLabel->Caption = ""; oLabel->Left = oEdit->Width + 4; oLabel->Top = 2; oLabel->Width = 30; } void __fastcall TLookupEdit::SetFieldSize(int value) { if (value!=FFieldSize) { FFieldSize = value; if (oEdit) { oEdit->Width = 12 * value; //Funktioniert nicht, da oEdit=Null oEdit->MaxLength = value; } } } int __fastcall TLookupEdit::GetFieldSize() { return FFieldSize; } //--------------------------------------------------------------------------- void __fastcall TLookupEdit::SetText(String value) { //this->oEdit->Text = value; ((TEdit*)this->Components[0])->Text = value;//Funktioniert FText = value; } String __fastcall TLookupEdit::GetText() { return FText; }Das Ändern der Werte im Property-Editor geht auch, hat im ersten Fall nur keine Auswirkung.
Also weiß jemand wann, wo und warum diese Objekte, bzw. Pointer auf Null gesetzt werden?Schon mal Danke

-
Du erzeugst im Konstruktor mit "TEdit *oEdit = new ..." eine neue Variable oEdit, die nur im Konstruktor gültig ist. Laß einfach den Typ TEdit vor *oEdit weg, damit die Variable aus der Komponente verwendet wird.
Rob'
-
Ah, ich Doof.
Vielen Dank Rob, funktioniert nun.