RichEdit Felder dynamisch erstellen
-
Hallo,
ich möchte in einer For-Schleife mehrere RichEdit's dynamisch erstellen.
Ich weiß wie ich eines erstellen kann, aber nicht mehrere.
Bisher siehts so aus:for(int i=0; i < Themen; i++) { TRichEdit *pRich = new TRichEdit(this); pRich->Parent = ScrollBox1; pRich->Width = 197; pRich->Enabled = false; pRich->Height = 90; pRich->Lines->Clear(); pRich->Lines->Add("Vorgeschlagene Themen: "); }
Aber wie gesagt das erstellt mir nur ein Feld; Wie kann ich mehrere erstellen und diese dann auch ansprechen?
-
vielleicht liegen die alle übereinander?
-
Nö, die liegen nicht alle übereinander:
for(int i=0; i < 10; i++) { TRichEdit *pRich = new TRichEdit(this); pRich->Parent = ScrollBox1; pRich->Left = 2*i; pRich->Top = 2*i; pRich->Width = 197; pRich->Enabled = false; pRich->Height = 90; pRich->Lines->Clear(); pRich->Lines->Add("Vorgeschlagene Themen: "); }
...zumindest nicht genau.
-
Wie kann ich mehrere erstellen und diese dann auch ansprechen?
Array
-
DynamicArray heist das zauberwort
DynamicArray<TEdit*>LblArray; int LblNum = 5; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { LblArray.Length = LblNum; for (int i = 0; i < LblArray.Length; i++) LblArray[i] = new TEdit(this); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { for (int i = 0; i < LblArray.Length; i++) { LblArray[i]->Parent = this; LblArray[i]->Text = "Label" + String(i+1); LblArray[i]->Top = 30 * i; LblArray[i]->Left = 10 * i; LblArray[i]->Show(); } }
-
ganz normales array reicht auch aus
-
ok geht auch mit normalem Array
void __fastcall TForm1::Button1Click(TObject *Sender) { TEdit *Edit[2]; for (int i=0;i<=2;i++) { Edit[i] = new TEdit(this); Edit[i]->Parent = this; Edit[i]->Top = i * 100; Edit[i]->Left = i * 100; Edit[i]->Show(); } }
zugreifen kann man dann mit dynamic_cast oder eben über das Array muss dan halt global definiert sein und nicht bei buttonclick wie im Bsp.
//--------------------------------------------------------------------------- void __fastcall TForm1::SpeedButton1Click(TObject *Sender) { TEdit *edt = dynamic_cast<TEdit*>(ActiveControl); if (edt) edt->Text = "Test"; } //---------------------------------------------------------------------------
-
Es braucht nicht zwingend ein Array... vielleicht sollten die Damen und Herren hier mal etwas in der FAQ rumblättern...
-junix
-
Original erstellt von junix:
**Es braucht nicht zwingend ein Array... vielleicht sollten die Damen und Herren hier mal etwas in der FAQ rumblättern...-junix**
und wie will er die dann ansprechen!? der gorße meister stroustrup hat in seiner bibel ja behauptet dynamisches casten sei böse! gut ich habs in meinem beispiel auch verwendet aber mit nem array kann ich ja auch direkt darauf zugreifen
[ Dieser Beitrag wurde am 18.03.2003 um 13:44 Uhr von M+A+T+T editiert. ]
-
Natürlich geht in diesem Fall der Zugriff per Array am schnellsten, aber wenn man die "Component-Verwaltung" der Form bemüht (TComponent::Components bzw. TForm::TComponent) gehts auch ohne.
Ach ja, hier in der FAQ nachzulesen
[ Dieser Beitrag wurde am 18.03.2003 um 14:01 Uhr von Peter editiert. ]
-
Hi,
Geht auch mit vector oder list!Alexander Sulfrian
-
geht mit jedem container
-
Ich danke euch für eure Antworten. Da ich noch Anfänger auf dem Gebiet bin habe ich mich für die Arrays entschieden. Ich weiß jetzt aber nicht wie ich die Größe des Arrays angeben soll, denn die berechnet sich. Ich habs dann so versucht:
TRichEdit *pRich[Themen+10];aber dann kommt die Fehlermeldung:
[C++ Fehler] themen.cpp(24): E2313 Konstantenausdruck erforderlich
Was mach ich falsch?
Man bin ich blöd, stand da ja schon, danke nochmal.
Nur versteh ich diese Sache mit den dynamische Arrays jetzt nicht so ganz. Funktioniert das jetzt bloß weil ich meine Länge einem integer Wert zuweise und dann die Länge des Arrays darauf setze?[ Dieser Beitrag wurde am 18.03.2003 um 15:53 Uhr von Heavenfighter editiert. ]
-
Original erstellt von Heavenfighter:
Was mach ich falsch?Du brauchst ein dynamisches Array.
-
Man bin ich blöd, stand da ja schon, danke nochmal.
Nur versteh ich diese Sache mit den dynamische Arrays jetzt nicht so ganz. Funktioniert das jetzt bloß weil ich meine Länge einem integer Wert zuweise und dann die Länge des Arrays darauf setze?
-
Hi ihrs...
Original erstellt von Heavenfighter:
Funktioniert das jetzt bloß weil ich meine Länge einem integer Wert zuweise
und dann die Länge des Arrays darauf setze?Also ich weiß jetzt nicht wies den anderen geht, aber ich versteh dich jetzt
nicht so ganz...int LblNum = 5; // meinst du das hier mit 'Länge einem integer Wert zuweisen'? //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { LblArray.Length = LblNum; // und das dann mit 'die Länge des Arrays darauf setze'? for (int i = 0; i < LblArray.Length; i++) LblArray[i] = new TEdit(this); }
???
wenn was ist hier dann dein Problem?
du kannst das dann natürlich auch so machen...LblArray.Length = 5; // also einfach hier einen Wert hinschreiben
MFG Aoeke
-
Ja ich meinte diese Zuweisung generell? Wieso kann ich bei einem normalen Array nicht auch einfach sagen LblArray.Length = themen +10?
Ist ja auch nicht so wichtig, ich wollt es halt nur noch mal fürs Verständnis wissen.
Ansonsten der Code funktioniert einwandfrei.