Instanzen von Frames bilden
-
Hallo,
kann mir jemand sagen weshalb ich von einem Frame nicht mehrere Kopien auf einer Form bilden kann?
Ich versuche einen Frame container für Datendarstellung ( soll ungebunden sein )zu erstekllen, möchte diesen mehrmals untereinander anzeigen lassen.
Erste instanz kriege ich erstellt.
TFrameDataContainer *dataContainer[ i ] =new TFrameDataContainer ( this ); dataContainer[ i ]->Parent = ( this ); // weiterrer Code , Position etc.Bei Instanzierung des nächten elements bekomme eine Zugriffsverletzung , dieser sei schon vorhanden.
Wie kommt das ?
Ich instanziere doch ein neues Objekt vom Typ TFrameDataContainer?Für freundliche Hilfe wäre ich dankbar!
-
Hallo
Ja, das hat mit den Instanzen selber nichts zu tun.
Sondern du must vor dem Zuweisen der Parent-Eigenschaft dem Frame noch eine eindeutige Bezeichnung für die Eigenschaft Name geben. Denn zur Laufzeit wird nur der Standardname vergeben.Das gleiche Problem hättest du auch zu Entwurfszeit, wenn du zwei Komponenten auf einer Form die gleichen Namen geben wolltest.
bis bald
akari
-
Danke für Deine Antwort.
Aber so ganz stimmt es denke ich nicht.
Selbest wenn ich feste Variable Namen habe , bekomme ich die Fehler Meldung
Komponente existiert bereits, dabei möchte ich nur neue Instanz der Klasse TFrameDataContainer erstellen, so wie das üblich bei der OOP ist.Oder ist das mal wieder ein Borland spezial
-
Nein, Akari meint, du mußt die Eigenschaft 'Name' eindeutig festlegen, d.h z.B.
dataContainer[ i ]->Name = "Frame" + IntToStr(i);
-
Hallo
Selbest wenn ich feste Variable Namen habe
Was verstehst du darunter? Du brauchst für jede neue Instanz einen neuen, vorher nicht vorhandenen Namen.
Du kannst das einfach testen, indem du zur Entwicklungszeit mal über den OI mehrere deiner Frames auf ein Form setzt.
Natürlich ist das Komponenten-Verhalten Borland-spezifisch. Die ganze VCL ist von Borland, und läuft nur mit Borland-Compilern.
bis bald
akari
-
Also Leute,
erstmal Danke für Eure Hilfe.
So funktionierts:
TFrame2 *fr=new TFrame2( new TGroupBox(this) ); TFrame2 *fr1=new TFrame2( new TGroupBox(this) );
-
Hallo
ja das geht auch, die beste (weil schlankeste) Variante ist es aber nicht.
bis bald
akari
-
Jo , das ist richtig, Danke.
Ich möchte nämlich damit eine Art typisierten visuellen DataContainer entwerfen, der autark von der Datenquelle arbeitet und aus einem Dynamic Array informationen
über eine im Frame abgebildeten GUI Schema darstellt.Die Container werden dann in die Form dynamisch pro Array Eintrag hinzugefügt.
Die Daten kommen ursprünglich aus dem Backend.
Nur exemplarisch, um zu zeigen was ich damit vorhabe.
static int x=10; static int y=10; box=new TGroupBox( this); box->SetBounds( x,y,500,80 ); box->Parent=this; box->Show(); y+=90; fr=new TFrame2( box ); fr->SetBounds( 10,10,fr->Width,fr->Height ); fr->Parent=box; fr->Show();Wie erwähnt nur exemplarisch, also nicht sofort kritisieren
