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);
}