Autor Beitrag
andyp17
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mi 16.02.11 14:20 
Hallo,
Ich schreibe ein Programm, das eine Menüleiste mit mehreren Unterpunkten hat. Jeder dieser Auswahlmöglichkeiten öffnet ein neues Fenster (frmTable). Diese Form ist für jede Auswahlmöglichkeit die gleiche - nur wird je nach Menüpunkt ein anderes Objekt in frmTable instanziiert. Doch wie mach ich das am elegantesten? Meine Idee war nun in der Tag-Eigenschaft jedes Menüpunkts den Namen des aufzurufenden Objekts zu übergeben (z.B. "TableUser"). Und aus diesem Namen "TableUser" soll dann eine Instanz der Klasse TableUser erstellt werden. Wie geht das?
Ich hoffe ihr wisst, was ich meine... :)

Danke!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 16.02.11 14:31 
Hallo!

Die Instanz einer Klasse erstellen, wenn Du nur den Namen als String hast, kannst Du über Reflection:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
    public class Test
    {
    }

    public partial class Form1 : Form
    {
        /* .. */

        private void button1_Click(object sender, EventArgs e)
        {
            var t = Type.GetType("WindowsFormsApplication1.Test");            
            var test = Activator.CreateInstance(t);

            MessageBox.Show(test.ToString());
        }
    }


Du wirst aber das Problem haben, dann auf die Methoden zuzugreifen, denn test ist in obigem Beispiel vom Typ object. Eine Lösung könnte hier sein, wenn alle in Frage kommenden Typen ein gemeinsames Interface implementieren, dann kann man dahin casten und dann mit dessen Methoden arbeiten.

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".