Container-Steuerelement mit variablem Namen

Ist es möglich den Namen eines Container-Steuerelements in einer Datenbank zu speichern um es variabel ein- und auszublenden?
Bisher benutze ich “projekte_kontakt1.Visible=false” um das Element anzeigen zu lassen. Nun soll “projekte_kontakt1” aber variabel sein, z.B. projekte_kontakt2.visible=false. Der Name des Elements soll aus einer Tabelle ausgelesen werden. Über einen Tipp ob es geht, und wenn ja wie, würde ich mich sehr freuen.

Du kannst dir ein Dictionary anlegen in der Webseite bzw. im Fenster und da unter einem Namen einen Verweis auf den Container rein legen.

Hallo Christian, erstmal vielen Dank für die schnelle Antwort. Ich werde es ausprobieren…

Nachdem ich nun eine Weile damit rumprobiert habe, komme ich leider noch nicht zum gewünschten Ergebnis. Ich habe es, wie von Christian beschrieben, mit einem Dicitionary probiert. Ich scheitre aber daran, dass ich nicht weiß wie ich den Namen des ContainerControls in der MySQL Datenbank speichern soll. Mit einem StringValue funktioniert es nicht.

Wo ist das Problem? Dazu gibt es doch Introspection. Zur Not tut es bestimmt auch eine Property.

Hallo Beatrix…vielen Dank für die Antwort. Ich weiß leider nicht was Du meinst. Ich möchte also das Dictionary aus einer Datenbank füllen. Es gibt ein Integer-Feld mit einer laufenden Nummer und ein zweites Feld mit dem Namen des ContainerControls. Dieses ist in meiner MySQL Datenbank ein String-Feld.
Ich lese nun aus dieser Tabelle die Nummer sowie den Namen des ContainerControls aus. Da es aber ein String ist bekomme ich diesen Namen nicht in die ContainerControl Property gespeichert.
Ich hoffe ich habe mich verständlich ausgedrückt.
Ich denke, dass das Problem dort liegt, dass ich den Namen des ContainerControls anders in der Tabelle speichern muss!?

Nein, das habe ich nicht verstanden. Also, es ist kein Problem, den Namen des CCs auszulesen…

Was hltst Du von einem Beispiel? Mit einfachem Array statt Datenbank.

OK…

  1. Ich habe einen Container cKontaktvorlage mit folgenden Properties:
    -VorlageNr (Type: Integer)
    -Projektcodetitel (Type: String)
    -formname (Type: ContainerControl)

  2. Ich habe ein Array cKontaktvorlagen()

  3. Den Container bzw. das Array fülle ich mit folgendem Code:

dim sql as String
sql=“SELECT * from tbl_kontakt_vorlagen;”
dim rs as RecordSet= app.dbmySQL_pp.SQLSelect(sql)
redim app.cKontaktvorlagen(-1)
if rs <> nil then
while not rs.eof
dim p As new cKontaktvorlage
p.VorlageNr=rs.Field(“VorlageNr”).IntegerValue
p.Projektcodetitel=rs.Field(“Projektcodetitel”).BooleanValue
p.formname=mainWindow.inhalt_projekte1.projekte_kontakt1
app.cKontaktvorlagen.Append§
rs.MoveNext
wend
rs.Close
end if

  1. Nun möchte ich den Wert der Eigenschaft formname mit einem variablen ContainerControl-Namen füllen(z.B. rs.field(“formname”).stringvalue). Der Name des jeweiligen ContainerControls steht in einem Feld der Tabelle tbl_kontakt_vorlagen. Da dieses aber ein Stringwert ist funktioniert die Zuweisung nicht.

Was haben p.formname und mainWindow.inhalt_projekte1.projekte_kontakt1 als Variablentyp? Was machst Du mit p.formname?

Wre es nicht einfacher, du nudelst durch alle CCs durch und zeigst die, die in der Datenbank ist?

p.formname hat als Variablentyp ContainerControl und mainWindow.inhalt_projekte1.projekte_kontakt1 ist das ContainerControl Element welches ich variabel, in einem Window, ein- und ausblenden möchte…
Ich lese aus einer anderen Tabelle die benötigte VorlagenNr aus, also z.B. 2, lese dann aus dem Array c.kontaktvorlagen die VorlageNr=2 aus und möchte dann gerne das zugehörige CC (also z.B. mainwindow.inhalt_projekte1.projekt_kontakt2) einblenden. Dafür muss ich im Array also die CC Namen in der Eigenschaft p.formname (Variablentyp ContainerControl) definieren.

Speichere doch alle ContainerControls beim Programmstart in einem Array:

Dim allForms() As Dictionary allForms.Append New Dictionary("Vorlage" : "1", "Instance" : New mainWindow.inhalt_projekte1.projekte_kontakt1) allForms.Append New Dictionary("Vorlage" : "2", "Instance" : New mainWindow.inhalt_projekte1.projekte_rechnung) allForms.Append New Dictionary("Vorlage" : "3", "Instance" : New mainWindow.inhalt_projekte1.projekte_artikel) ...
Jedes der ContainerControls wird dabei gleich “constructed”, aber sonst passiert nichts. Die Open events werden erst aufgerufen, wenn das ContainerControl in ein Fenster eingebettet wird (EmbedWithin).

Danke, Eli, auch für Deine Antwort!
Aber mein Hauptproblem ist ja, dass ich die Namen der ContainerControls, in Deinem Beispiel projekt_kontakt1, Projekte_rechnung und projekte_artikel, nicht aus meiner Datenbank auslesen kann, da sie dort als String gespeichert sind. Ich will die Namen der CC’s nicht im Programmcode ändern und ergänzen müssen, sondern über die oben beschriebene Tabelle.
Wie muss ich die Bezeichnungen der CC’s speichern, so dass ich sie dann Variabel in ein Dictionary oder Array einlesen kann?

Das geht nicht. Du kannst keine Instanz einer Class erstellen, wenn Du nur den Namen als String hast. Du musst irgendwo (zum Beispiel beim Programmstart), die Verknüpfung zwischen dem Namen der Class und der Class herstellen.

OK!
Schade, aber trotzdem vielen Dank für Deine Antwort.