vb.net 2010 Express: Forms progamm-gesteuert öffnen

Gast #2160014
Lesenswert?

Hallo zusammen,

ich habe eine Mdi-Form mit einigen Child-Formen.
Auf der Mdi sitzt das Menustrip mit den diversen Auswahlmöglichkeiten.

Nun möchte ich, dass programmabhängig, Childformen geöffnet werden, ohne 
das ich manuell im Menu anklicke.

Standardmässig werden vom Menu her die Formen so geöffnet:

     frmFormxyz.MdiParent = Me
     frmFormxyz.Show()

Da das Programm den Formnamen(frmFormxyz.name) nicht kennt, dachte ich 
mir, dass ich diesen Namen per Variable übergebe, so etwa:

Dim variable as String
..
..
..
variable = "frmFormxyz"

Nur, wie binde ich diese Variable in diese zwei Zeilen ein?

     .MdiParent = Me
     .Show()


Ein Tag voller Verzweifelung und Googleritis liegt hinter mir...

Habt ihr einen Rat? Besten Dank!
Gast #2160714
Lesenswert?

eugler schrieb:
> ohne Kenntnis des Objektes, oder?

Von der Form die geladen werden soll kenne ich die
.Name und .Text Eigenschaften. Diese liegen in einer String-Variablen 
vor.

Ich hole mal was weiter aus:

Das Hauptformula(Mdi) beinhaltet ein Menü/Untermenüs mit ca. 60 
Einträgen zum Aufrufen von 60 verschiedenen Forms(Child).

Um dem Nutzer das wiederfinden einer Form zu erleichtern, kann eine Form 
zu den 'Favoriten' abgelegt werden.
Dazu habe ich eine Listview am linken Rand der Mdi gesetzt in diese der 
Nutzer seine Form einträgt. Dabei werden die .Name und .Text 
Eigenschaften dieser Form in String-Variablen gesichert.
Das funktioniert soweit alles. Wenn nun der Nutzer auf einen Eintrag der 
Favoritenliste doppelklickt, soll die gewünschte Form geladen werden.
An eben diesen Ladevorgang knobel ich seit gestern rum...

Schönen Gruß und danke für eure Beiträge!
Gast #2160758
Lesenswert?

Peter II schrieb:
> dann stecke doch alle Formulare in eine Liste und vergleiche sie
> einzeln.

Kannst du das genauer erklären? Warum muss ich was vergleichen? Ich 
kenne(habe) die .Name Eigenschaft der gewünschten Form. Nur, ich schaffe 
es nicht diese .Name in die Show()-Befehlssequenz einzubauen.
#2160983
Lesenswert?

Leerling schrieb:
> Peter II schrieb:
>> dann stecke doch alle Formulare in eine Liste und vergleiche sie
>> einzeln.
>
> Kannst du das genauer erklären? Warum muss ich was vergleichen? Ich
> kenne(habe) die .Name Eigenschaft der gewünschten Form. Nur, ich schaffe
> es nicht diese .Name in die Show()-Befehlssequenz einzubauen.

Stichwort: Reflection
1
             string formName = "Form1";
2
            Assembly asm = Assembly.GetExecutingAssembly();
3
            // falls der vollständige Typname bekannt ist
4
            // z.B. über xyz.GetType().FullName statt xyz.Name
5
            // reicht
6
            //var ty = asm.GetType(fullName);
7
            var allTypes = asm.GetTypes();
8
            var tys = (from t in allTypes where t.Name == formName select t).ToArray();
9
            // MethodInfo für Show ohne Parameter
10
            var mi = tys[0].GetMethod("Show", new Type[0]);
11
            // Instanz erzeugen
12
            var inst = Activator.CreateInstance(tys[0]);
13
            // und das ganze Aufrufen
14
            mi.Invoke(inst, null);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren