Laden...

dynamisches Menu

Erstellt von ChrisProg vor 15 Jahren Letzter Beitrag vor 15 Jahren 3.516 Views
ChrisProg Themenstarter:in
174 Beiträge seit 2009
vor 15 Jahren
dynamisches Menu

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

Gelöschter Account
vor 15 Jahren

natürlich kannst du dir eine methode basteln die aufgrund eines stringinputs das menu dynamisch zusammenbaut.

ChrisProg Themenstarter:in
174 Beiträge seit 2009
vor 15 Jahren

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

Gelöschter Account
vor 15 Jahren

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.

ChrisProg Themenstarter:in
174 Beiträge seit 2009
vor 15 Jahren
"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

Gelöschter Account
vor 15 Jahren

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?

ChrisProg Themenstarter:in
174 Beiträge seit 2009
vor 15 Jahren

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

Gelöschter Account
vor 15 Jahren

was du vor hast weiß ich. meine frage ist wo du probleme bei der umsetzung hast.

ChrisProg Themenstarter:in
174 Beiträge seit 2009
vor 15 Jahren

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

Gelöschter Account
vor 15 Jahren

sowas musst du per rekursion lösen.

wie stellst du dir denn den inputstring vor? hat er eine vorgegebenen aufbau oder hast du dir da schon was ausgedacht?

ChrisProg Themenstarter:in
174 Beiträge seit 2009
vor 15 Jahren

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)

  1. Eintrag:
    x_prog_nr = 1
    x_text = 'Programme'
    x_par_prog = 0
    bedeutet: es soll ein Hauptmenüeintrag mit der Bezeichnung 'Programme' werden

...
...

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.

Gelöschter Account
vor 15 Jahren

kannst du bei dieser definition was drehen oder ist es so vorgegeben?

ChrisProg Themenstarter:in
174 Beiträge seit 2009
vor 15 Jahren

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

Gelöschter Account
vor 15 Jahren

was meinst Du genau mit was drehen?

kannst du an dem format etwas ändern? z.b. ein xml daraus machen? oder die werte anders aufbauen?

ChrisProg Themenstarter:in
174 Beiträge seit 2009
vor 15 Jahren

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

Gelöschter Account
vor 15 Jahren

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.

ChrisProg Themenstarter:in
174 Beiträge seit 2009
vor 15 Jahren

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