C# - MenuItem tulajdonságai

Menükezelés 1. rész

forráskód letöltése
Most induló sorozatunk célja az alkalmazásokban használható menürendszer minden lehetséges felhasználási módjának bemutatása. Menükezeléshez két komponens áll rendelkezésünkre: a MainMenu és a ContextMenu. Sorozatunkban mind a kettő teljes bemutatására sort kerítünk, valamint megnézzük azokat az osztályokat is, melyek szorosan kapcsolódnak a menükezeléshez.
Mostani cikkünkben a MenuItem osztály tulajdonságait vizsgáljuk meg. Továbbá azt is megnézzük, hogy MDI ablakok használata esetén miként oldható meg, hogy a fő Form-on és a gyermek Form-on lévő menürendszer automatikusan összeolvadjon, amikor az adott gyermek ablak aktív.
A vizsgálathoz helyezzünk egy MainMenu komponenst a Form-ra és vegyünk fel benne néhány elemet. Mivel egy Form-ra több MainMenu komponenst is helyezhetnénk, így annak eldöntésére, hogy melyik jelenjen meg a Form Menu property-jét kell használnunk. Itt kell kiválasztanunk azt a MainMenu-t, amelyiket aktuálisan használnánk.
Miközben vesszük fel a menüpontokat a menürendszerbe, minden egyes elemhez egy új osztály jön létre. Ez az osztály lesz a MenuItem, mellyel mostani cikkünk részletesebben foglalkozik.
MDI ablakok kezelése
Amikor MDI ablakokat is használunk, akkor lehetőségünk van arra, hogy a gyermek ablakon lévő MainMenu komponensben tárolt menüpontokat hozzáadjuk a fő Form-on lévő menürendszerhez abban az esetben, amikor az adott gyermek ablak az aktív. Amikor ez a gyermek ablak megszűnik, vagy inaktív lesz, mert mondjuk egy másik ablak kerül előtérbe, akkor az így hozzáadott menüpontok is eltűnnek.
Lehetőségünk van arra is, hogy a két menürendszer ne csak egyszerűen összemásolásra kerüljön, hanem a gyermek ablak menüpontjai egy meghatározott helyre kerüljenek, vagy akár kicseréljék a szülő Form menürendszerének néhány menüpontját.
Ezek megvalósítására található a menüpontok tulajdonságai között a MergeOrder és MergeType property. Ha minden menüpontnak adunk egy sorszámot a MergeOrder-ben, akkor az egyes menük úgy lesznek összemásolva, hogy az itt megadott számok egymásután következzenek.
Mellékelt példában a szülő Form-on lévő „Első” nevű menüpontnál a MergeOrder 0, a „Második”-nál a MergeOrder 2.
A Form2-nél lévő menürendszer „Child” menüpontjánál a MergeOrder értéke 1-re lett állítva. Így amikor a fő Form-nál az „Első – Form 2” menüpontot választjuk és ezzel megnyitjuk a Form2-t, akkor a fő Form menürendszerébe a „Child” menüpont az „Első” és a „Második” közé kerül, mivel a MergeOrder property-knél így kerül növekvő sorrendbe a megadott 0, 1 és 2 érték.
A menüpontok MergeType property-jénél adhatjuk meg, hogy az egyes menüpontoknál milyen művelet legyen végrehajtva. Ha például a MergeOrder azonos értéket tartalmaz és a MergeType-nál Replace érték szerepel, akkor az adott menüpont le lesz cserélve. Ha itt a Remove értéket adjuk meg, mint ahogy a fő Form „Harmadik” menüpontjánál tettük, akkor a Form2 megjelenésekor ez a menü egyszerűen eltűnik. Ha bezárjuk a Form2-t, akkor újra megjelenik.
MDI ablakok kezeléséhez a fő Form-nál az IsMDIContainer property-t kell igazra állítanunk, jelezve ezzel, hogy e Form képes gyermek MDI Form-ok fogadására.
Ahhoz, hogy a Form2-ből pedig MDI gyermek ablak legyen, annyi a teendő, hogy annak létrehozásakor az MdiParent property-jében megadjuk a Form1-et, mint MDI szülő ablakot.
    private void menuItem2_Click(object sender, System.EventArgs e)
    {
      Form2 f = new Form2();
      f.MdiParent = this;
      f.Show();
    }
A MenuItem osztály property-jei
A MenuItem osztály a Menu osztályból származik. Fontos tudnunk, hogy a MainMenu és ContextMenu szintén a Menu osztályból származik. Így MenuItem, MainMenu és ContextMenu közös őse miatt lesznek azonos tulajdonságok, de ezekre csak sorozatunk egy későbbi részében térünk vissza, most nézzük csak a MenuItem osztályban lévő tulajdonságokat.
BarBreak
Osztály: System.Windows.Forms.MenuItem
public bool BarBreak {get; set;}
Menüt megjeleníthetünk több oszlopban is. Az oszlop töréséhez a BarBreak property-t kell igazra állítani, az oszlopok között megjelenik egy elválasztó vonal is.
Break
Osztály: System.Windows.Forms.MenuItem
public bool Break {get; set;}
Menüt megjeleníthetünk több oszlopban is. Az oszlop töréséhez a Break property-t kell igazra állítani, ekkor nem jelenik meg az oszlopok között elválasztó vonal.
Checked
Osztály: System.Windows.Forms.MenuItem
public bool Checked {get; set;}
A Checked property-vel szabályozhatjuk, hogy az adott menüpont előtt jelenjen-e meg egy kis pipa vagy sem.
DefaultItem
Osztály: System.Windows.Forms.MenuItem
public bool DefaultItem {get; set;}
Ha a DefaultItem property-t igazra állítjuk, akkor a menüben az lesz az alapértelmezett menüpont. Ebből csak egy lehet minden legördíthető menüben. Ennek hatására, ha arra a menüpontra duplán kattintunk, melyből nyílik ez a legördülő menü, akkor az alapértelmezettként megjelölt menüpont kerül automatikusan kiválasztásra.
Enabled
Osztály: System.Windows.Forms.MenuItem
public bool Enabled {get; set;}
Az Enabled property-vel engedélyezhetjük, tilthatjuk a menüpont működését.
Index
Osztály: System.Windows.Forms.MenuItem
public int Index {get; set;}
A menüpont pozícióját határozza meg a menüben az Index property.
IsParent
Osztály: System.Windows.Forms.MenuItem
public override bool IsParent {get;}
Igaz, ha a menüpont tartalmaz gyermek menüpontokat. Ekkor ezeket a MenuItems property-n keresztül lehet elérni.
MdiList
Osztály: System.Windows.Forms.MenuItem
public bool MdiList {get; set;}
Ha igaz értéket adunk az MdiList property-nek, akkor MDI Form-ok esetén a gyermek Form-okról készült listában megjelenhet az adott Form is.
MenuID
Osztály: System.Windows.Forms.MenuItem
protected int MenuID {get;}
A menüpont egyedi Windows azonosítóját olvashatjuk ki a MenuID property-ből.
MergeOrder
Osztály: System.Windows.Forms.MenuItem
public int MergeOrder {get; set;}
Itt megadhatunk egy tetszőleges sorszámot, mely a menük összefűzésénél játszik szerepet. Az összefűzés abban a sorrendben történik, ahogy az egyes menükhöz rendeljük az egyre növekvő számokat.
MergeType
Osztály: System.Windows.Forms.MenuItem
public MenuMerge MergeType {get; set;}
Az összefűzés módja határozható meg a MergeType property-n keresztül. Ennek lehetséges értéke az alábbiak egyike:
Típus Leírás
Add A menüpont hozzáadásra kerül a többihez.
MergeItems A menüpont összes almenüpontja összefűzésre kerül a menüvel.
Remove A menüpont törlésre kerül összefűzéskor.
Replace A menüpont cserélésre kerül az azonos sorszámú menüponttal.
Mnemonic
Osztály: System.Windows.Forms.MenuItem
public char Mnemonic {get;}
Ha a Text property-ben használtuk a & jelet és ezzel megjelöltünk egy karaktert, akkor ezt a Mnemonic property-n keresztül kiolvashatjuk.
OwnerDraw
Osztály: System.Windows.Forms.MenuItem
public bool OwnerDraw {get; set;}
Ha az OwnerDraw property igaz, akkor lehetőségünk van arra, hogy a DrawItem eseménynél magunk rajzoljuk ki a menüpont képét.
Parent
Osztály: System.Windows.Forms.MenuItem
public Menu Parent {get;}
A Parent property-n keresztül elérhetjük azt a menüt, amely az adott menüpontunkat tartalmazza.
RadioCheck
Osztály: System.Windows.Forms.MenuItem
public bool RadioCheck {get; set;}
A RadioCheck segítségével olyan kis jelet tehetünk a menüpont elé, melyet akkor szokás alkalmazni, ha több menüpont közül mindig egyet kell megjelölni. Ekkor a Checked property igazra állításával jelenik meg az adott jel.
Shortcut
Osztály: System.Windows.Forms.MenuItem
public Shortcut Shortcut {get; set;}
A ShortCut property-nél kiválaszthatunk egy gyorsbillentyűt az adott menüponthoz.
ShowShortcut
Osztály: System.Windows.Forms.MenuItem
public bool ShowShortcut {get; set;}
A ShortCut property-ben kiválasztott gyorsbillentyű szöveges leírása is megjelenik a Text property-ben, ha a ShowShortCut property-t igazra állítjuk.
Text
Osztály: System.Windows.Forms.MenuItem
public string Text {get; set;}
A Text lesz az a property, amelyen keresztül a menüpont szövegét adjuk meg.
Megjegyzés
Ha szeretnénk egy-egy karaktert aláhúzással megjelölni és ezáltal elérni, hogy az Alt + aláhúzott karakter lenyomásakor a menüpont kiválasztásra kerüljön, akkor használjuk a karakter előtt a & jelet a Text property-ben.
Ha arra lenne szükségünk, hogy a két menüpont között egy vízszintes elválasztó vonalat jelenítsünk meg, akkor ezt úgy érhetjük el, hogy a Text property-be egyetlen mínusz jelet (-) írunk.
Visible
Osztály: System.Windows.Forms.MenuItem
public bool Visible {get; set;}
A Visible property-n keresztül adhatjuk meg, hogy a menüpont látható legyen-e vagy sem.

Menükezelés cikksorozat