XML, dynamiczne menu, show()

0

Witam wszystkich!

Mam plik XML o postaci:

<dynamiczne_menu>

<menu1>
  <nazwa_menu> File </nazwa_menu>
  <ID_menu> 1 </ID_menu>
  <Parrent_ID_menu> 0 </Parrent_ID_menu>
</menu1>

<menu2>
  <nazwa_menu> Open </nazwa_menu>
  <ID_menu> 2 </ID_menu>
  <Parrent_ID_menu> 1 </Parrent_ID_menu>
</menu2>

<menu3>
  <nazwa_menu> Save </nazwa_menu>
  <ID_menu> 3 </ID_menu>
  <Parrent_ID_menu> 1 </Parrent_ID_menu>
</menu3>

<menu4>
  <nazwa_menu> Help </nazwa_menu>
  <ID_menu> 4 </ID_menu>
  <Parrent_ID_menu> 0 </Parrent_ID_menu>
</menu4>

<menu5>
  <nazwa_menu> About </nazwa_menu>
  <ID_menu> 5 </ID_menu>
  <Parrent_ID_menu> 4 </Parrent_ID_menu>
</menu5>

<menu6>
  <nazwa_menu> Help Index </nazwa_menu>
  <ID_menu> 6 </ID_menu>
  <Parrent_ID_menu> 4 </Parrent_ID_menu>
</menu6>

</dynamiczne_menu>

nazwa_menu - to wyświetlany tekst menu
ID_menu - to ID pozycji menu, kolejne liczby od 1 do N (N-liczba wszystkich menu)
Parrent_ID_menu - ID_menu ojca. Wartość 0 dla głównego menu (poziom 0).

po kliknięciu w dowolną pozycję menu, chciałbym aby wykonywana została metoda Show(ID_menu); - gdzie jedynym parametrem jest ID klikniętego menu.

Proszę o wskazówki, jak zbudować klasę, która zbuduje takie dynamiczne menu napodstawie pliku XML i wyświetli je na formie....

<font size="3"> Dziękuje za wszelkie wskazówki i pomoc!</span>

Der1

1

Masz wpływ na tego XML-a? Bo nie po to XML jest hierarchiczne żeby korzystać w nim z jakiś "uchwytów" do rodzica (btw parrent_menu_id a nie parrent_id_menu)...

po kliknięciu w dowolną pozycję menu, chciałbym aby wykonywana została metoda Show(ID_menu); - gdzie jedynym parametrem jest ID klikniętego menu.

Proszę o wskazówki, jak zbudować klasę, która zbuduje takie dynamiczne menu napodstawie pliku XML i wyświetli je na formie....

To chcesz stworzyć to menu z XML czy pokazać? Jeśli stworzyć, to będzie dość prosto - tworzysz klasę menu w kodzie (powiedzmy MenuStrip m = new MenuStrip()) a później dodajesz do niego wszystkie subitemy. Spróbuj chociaż zacząć.

0

Wpływ na XML mam. Dokładnie rzecz biorąc, to XML może mieć dowolną strukture/budowę. Mnie się wydawała dobra (stosunkowo prosta) ta którą pokazałem. Ale jak masz lepszy pomysł, to chętnie usłyszę co proponujesz...

Ze stworzeniem jednego menu (dynamicznie) nie będę miał raczej większych problemów. Znalazłem gotowe kody, 1000 rozwiązań na różne sposoby. Gorzej z wykorzystaniem tego, a dokładnie mam problemy z odniesieniem się do dynamicznego obiektu (tu menu), no i też pewnie byłyby problemy z "podpięciem" do n-tego menu wywołania mojej metody...

Tu jest prawie to co mnie interesuje:

http://www.codeguru.com/csharp/csharp/cs_misc/designtechniques/print.php/c15661

Niestety mam duże problemy z przeanalizowanie tego kodu :(

Tu jest chyba to samo:

http://www.codeguru.com/csharp/csharp/cs_misc/designtechniques/article.php/c15661__2/Create-a-Dynamic-Menu-Using-C.htm

Spróbuje to odpalić, ale widzę, że nie do końca to jest to czego potrzebuje, a przeróbka możne zając więcej czasu niż napisanie od początku (nawet biorąc pod uwagę moje nikłe doświadczenie z C sharp-em).

Znalazłem kilka wskazówek (po angielsku):

http://bytes.com/topic/c-sharp/answers/833419-xml-driven-menu-control-generation

Tu jest podobny temat:

http://bytes.com/topic/c-sharp/answers/585755-how-dispose-dynamic-menu-items

Problem "trochę" mnie przerasta. Ja to widzę tak:

  1. wczytuje kolejne pozycje z XML
  2. dynamicznie tworzę menu, sub menu, itd.. (określając text menu i zdarzenie onClick dla tego menu)
  3. wyświetlam całe menu przy tworzeniu / wyświetlaniu formy.

Z dynamicznym otworzeniem menu nie będę miał problemu (mam gotowe przykłady w sieci i na msdn), tylko pytanie: jak się odwołać do tego menu ? (skoro taka pozycja nie ma nazwy, a jeśli ma to jaką ?)

Pozdr.

DER1

1

Mnie się wydawała dobra (stosunkowo prosta) ta którą pokazałem. Ale jak masz lepszy pomysł, to chętnie usłyszę co proponujesz...

Nie wiem czy to drugie zdanie nie było lekko złośliwe, ale co tam :) Moim zdaniem idealna konstrukcja wyglądałaby np. tak (chociaż podobnych równie dobrych wariacji są setki):

<menu>
    <item text="file">
        <item text="open" />
        <item text="save" />
        <item text="close" />
    </item>
    <item text="edit">
        <item text="copy" />
        <item text="paste" />
    </item>
</menu>

no ale to w końcu twój kod i jeśli jest ci wygodniej z tamtym poprzednim xml to nie ma sprawy.

jak się odwołać do tego menu ? (skoro taka pozycja nie ma nazwy, a jeśli ma to jaką ?)

Rozumiem że tworzysz obiekt menu i wypełniasz subitemami? Następnie pewnie dodajesz go do Controls formy (to konieczne)?
Nie wiem czy cię dobrze rozumiem, ale możesz po prostu utworzyć w klasie Form1 (domyślnie) pole MojeMenuZXml, wypełnić je i przez nie odwoływać się do kontrolki na ekranie. Do menu możesz się też odwołać wyciągając je z Controls formy ale to czasochłonne (zarowno dla programisty jak i procesora).

0

Zero złośliwości ! Tak mi się napisało, szybko pisałem.

No taka forma XML podoba się... Nawet wiem jak odczytać poszczególne pozycje (jestem początkujący w C# i w ogóle programowaniu).

Popracuje nad resztą, jak będę miał pytania (a na pewno będę miał) to będę Was dalej męczył!

Pozdr.
Der1

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.