Hallo zusammen,
ich komme aus der FoxPro-Entwicklung und arebeite mich nun in C# ein.
Dazu habe ich eine grundsätzliche Frage:
Ich weiß, das es Makrosubsititution in C# nicht gibt.
(Zur Erklärung: wenn man in VFP in eine Variable z.B. "tabelle.feld1" schreibt und anschließend bei dieser Variablen eine Makrosubstitution durchführt, so erhält man den Inhalt des genannten Tabellenfeldes --> dies ist eine sehr nützliche Funktion, wenn man zur Entwicklungszeit noch nicht genau die Variable/ das Feld kennt, so kann man es sich halt als String aufbauen und anschließend als Objekt benutzen)
Wie kann man so etwas in C# lösen ?
Konkret gefragt, gibt es eine Möglichkeit aus einem String zur Laufzeit ein Objekt zu erstellen? In meinem konketen Gedankenspiel möchte ich ein dynamisches Menü erstellen, d.h. ich weiß zur Entwicklungszeit noch nicht, welche Einträge vorhanden sein werden.
MfG ChrisProg
Hallo JAck30lena,
kannst Du mir eventuell ein Codebeispiel zeigen oder linken?
Ich suche nämlich schon seit Tagen nach so etwas im Netz / Onlinehilfe, hab aber nie etwas ( nicht einmal ansatzweise ) gefunden.
Wie gesagt: ich weiß nicht, wie ich aus einem String ein Objekt erstellen kann ( der umgekehrte Weg ist ja recht einfach ).
MfG ChrisProg
eine möglichkeit ist, etwas selbst zu definieren. sprich einfach ala:
"hauptmenu;submenu1;submenu2;submenu3;" den string nach ";" aufzusplitten und ein menu zu erzeugen und je submenu ein subitem hinzuzufügen. die andere möglichkeit ist mithilfe der Activator.CreateInstance-Methode aus einem string direkt die instanz zu erzeugen. allerdings muss dann der string recht eindeutig sein. also mindestens die volle typbezeichnung (system.x.x.x.x.x.x......), was beim manuellen schreiben recht lästig sein kann.
"hauptmenu;submenu1;submenu2;submenu3;" den string nach ";" aufzusplitten und ein menu zu erzeugen und je submenu ein subitem hinzuzufügen
und wie machst Du das dann ( ich meine natürliche das mit dem Menü erzeugen, das mit dem String aufsplitten ist ja "peanuts" )?
Ich muß definitif eine String-Variable haben, mit der ich ein Obejkt erstellen und anschließend mit dieser Variablen als Referenz drauf zugreifen kann (Eigenschaften einstellen z.B. oder auch wie Du schon schreibst ein SubMenuItem einfügen kann).
MfG ChrisProg
Variablen als Referenz drauf zugreifen kann
ich denke du solltest davon abschied nehmen. es ist mit einigem hickhack möglich aber nicht notwendig. c# ist dazu eigendlich nciht geeignet. (oder erst ab 4.0 😃 )
und wie machst Du das dann ( ich meine natürliche das mit dem Menü erzeugen, das mit dem String aufsplitten ist ja "peanuts" )?
wo genau hackt es denn?
Hallo,
es hakt eigentlich nirgendwo.
Ich weiß, wie ich ein Menü mit all seinen Eigenschaften und Metoden erstellen kann. Auch weiß ich wie ich SubMenü-Einträge erstelle.
Nur ich weiß halt zur Entwicklungszeit noch nicht, welche Menüeinträge genommen / erstellt werden sollen; das entscheidet sich erst während der Laufzeit durch das Auslesen einer entsprechenden Tabelle, und die könnte sich je User ändern.
MfG ChrisProg
Hallo,
ich will mir einfach tausende ( 🤔 ) Zeile Code sparen.
Im Moment mach ich das nämlich diskret mit Case-Anweisungen. Das Problem dabei, je tiefer man in eine Unterstruktur kommt, um so umfangreicher sind dann leider die Möglichkeiten, die dann ja auch behandelt werden müssen. Ich spreche hier von ca. 40 bis 100 unterschiedlichen Menüeinträgen auch auf Submenü-Ebene.
Und wie gesagt mit FoxPro und Makrosubstitution hatte ich das mit ca. 30 Zeilen Code erledigt 😁
MfG ChrisProg
Hallo,
Beispiel:
Bedeutung der Varaiablen:
x_prog_nr --> lfdProgrammNr hier gleichzeitig MenuItemNr
x_text --> Menübeschriftung
x_par_prog --> wenn ungleich 0 dann ist es ein Untermenüpunkt von MenuItemNr (x_par_prg)
...
...
x. Eintrag:
x_prog_nr = 101
x_text = 'Stammdaten'
x_par_prog = 1
bedeutet: es soll im Menü 'Programme' ein Untermenü 'Stammdaten' erstellt werden
...
...
y.Eintrag
x_prog_nr=10101
x_text= 'Kundenstamm'
x_par_prog = 101
bedeutet: es soll im Untermenü 'Stammdaten' ein Menüeintrag 'Kundenstamm' erstellt werden, bei dem ich dann auch noch einstellen will, welche Exe-Datei bei Click geöffnet werden soll.
So, ich hoffe, das ich mich nun einigermaßen verständlich ausgedrückt haben.
Hallo,
was meinst Du genau mit was drehen?
Die Werte sind irgendwie schon vorgegeben, die Reihenfolge des Einlesens ergibt sich aus der Order nach x_prog_nr und x_par_prog.
Ich muß ja est die Hauptmenüeinträge erstellen, bevor ich dazu Untermenüeinträge erstellen kann, sonst sagt mir das Programm ja zurecht, das der Menüeintrag nicht vorhanden ist.
MfG ChrisProg
Hallo,
also mit XML habe ich mich noch nicht beschäftigt ( ich finde den Umstieg VFP - C# schon für den Anfang schwer genug ) .
Mach mal einen Vorschlag.
MfG ChrisPorg
bau dir eine gültige xml-struktur und lade sie in ein xml-document ein (mit XmlDocument.Load(path)). hier kannst du dann beliebig mit xpath z.b. durch die knoten manövrieren oder aber durch die nodes-collections. ausführliche beispiele findest du in der msdn.
es ist nicht allzu schwer und wenn du dir das mal genauer ansiehst, wirst du sehen, wie einfach dann deine aufgabenstellung umzusetzen ist.
Hallo JAck30lena,
ich danke Dir für das Brainstorming 8)
Ich werde in den nächsten Tagen versuchen das Umzusetzten.
Bis dahin erst einmal Danke.
MfG ChrisProg