C# - MenuItem eseményei

Menükezelés 2. rész

forráskód letöltése
Egy menüpont létrehozásakor arról is rendelkezhetünk, hogy milyen legyen annak kinézete. Felhasználva a GDI+ kínálta lehetőségeket egy-egy menüpontot tetszőleges grafikával együtt hozhatunk létre, jeleníthetünk meg. Ehhez nem kell mást tennünk, mint a menüpont néhány speciális eseményét felhasználni.
A MenuItem eseményei között találunk még ezen kívül jó pár hasznosat, melyet érdemes megismernünk.
Nézzük át először is milyen eseményeket találunk a MenuItem osztályban. Közben ne felejtsük el, hogy 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 ezek az események is.
Click
Osztály: System.Windows.Forms.MenuItem
public event EventHandler Click;
A Click esemény akkor jön létre, ha a felhasználó rákattintott az adott menüpontra.
Popup
Osztály: System.Windows.Forms.MenuItem
public event EventHandler Popup;
A Popup esemény akkor jön létre, ha az adott menüponthoz tartozó legördíthető almenü megjelenik.
Select
Osztály: System.Windows.Forms.MenuItem
public event EventHandler Select;
A Select esemény akkor jön létre, ha a felhasználó az egeret épp e menüpont fölé mozgatja.
DrawItem
Osztály: System.Windows.Forms.MenuItem
public event DrawItemEventHandler DrawItem;
Egy menüpont a DrawItem eseménynél tetszőleges módon kirajzolható. Az esemény paramétere számos olyan property-t tartalmaz, melyekre szükségünk lesz a kirajzolás folyamán.
Property Leírás
BackColor Az alapértelmezett menü háttérszíne Color típusban.
Bounds Az a téglalap Rectangle típusban, melynek területén elvégezhetjük a menüpont kirajzolását.
Font Az alapértelmezett menü betűtípusa Font típusban.
ForeColor Az alapértelmezett menü betű színe Color típusban.
Graphics A rajzoláshoz szükséges Graphics osztály.
Index A menü sorszáma.
State Az adott menü aktuális állapota DrawItemState típusban.
Megjegyzés
A DrawItem esemény csak akkor jön létre, ha az OwnerDraw property értéke igaz.
A DrawItemState felsorolt típus az alábbi elemek tartalmazza:
  • Checked
  • ComboBoxEdit
  • Default
  • Disabled
  • Focus
  • Grayed
  • HotLight
  • Inactive
  • NoAccelerator
  • NoFocusRect
  • None
  • Selected
MeasureItem
Osztály: System.Windows.Forms.MenuItem
public event MeasureItemEventHandler MeasureItem;
Minden menüpont mérete különböző lehet. Ennek meghatározásához jön létre a MenuItem esemény. Itt az esemény paramétereként kapott property-kben kell megadni, hogy az adott menüpont mekkora legyen.
Property Leírás
Graphics A rajzoláshoz szükséges Graphics osztály.
Index A menü sorszáma.
ItemHeight Itt kell megadnunk, hogy az adott menü hány pixel magas legyen.
ItemWidth Itt kell megadnunk, hogy az adott menü hány pixel széles legyen.
Megjegyzés
A DrawItem esemény csak akkor jön létre, ha az OwnerDraw property értéke igaz.
Az ItemWidth property-ben ha különböző szélességeket adunk meg, akkor minden menüpont szélessége az itt megadott értékek közül a legnagyobb értékű lesz.
A példaprogram
Nézzük miként is történik egy menüpont egyedi rajzolatának megvalósítása. Ehhez a már ismertetett DrawItem esemény lesz a kulcs. Ez minden olyan esetben meghívásra kerül ahányszor csak egy menüpontot ki kell rajzolnunk. Az esemény sender paraméterében megkapjuk MenuItem típusban azt a menüpontot, melynek kirajzolását meg kell valósítanunk. Ezt felhasználva megtudhatjuk, hogy milyen feliratot kell megjelenítenünk a menüpontban. Hogy a felirat mellé még milyen grafikát jelenítünk meg az már csak rajtunk, illetve az adott feladatunktól függ.
    private void menuItem10_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
    {
      MenuItem mi = sender as MenuItem;
      Random r = new Random();
      e.Graphics.FillRectangle(new LinearGradientBrush(e.Bounds, Color.Beige, e.BackColor, 0, false), e.Bounds);
      e.Graphics.DrawString(mi.Text, new Font("Times New Roman", 12, FontStyle.Bold), new SolidBrush(e.ForeColor), e.Bounds.Left+40, e.Bounds.Top+2, StringFormat.GenericDefault);
      e.Graphics.DrawString("www.SoftwareOnline.hu", new Font("Verdana", 7), new SolidBrush(Color.Red), e.Bounds.Left+40, e.Bounds.Top+20, StringFormat.GenericDefault);
      e.Graphics.FillEllipse(new HatchBrush(HatchStyle.LargeConfetti, Color.Black, Color.FromArgb(r.Next(256), r.Next(256), r.Next(256))), e.Bounds.Left+4, e.Bounds.Top+4, e.Bounds.Left+32, e.Bounds.Height-4);
    }

Menükezelés cikksorozat