Proces kreiranja menija u .Net-u nazalost ne podrzava standardno dodavanje ikona... Srecom, tu nam pomaze GDI+.
Dodavanje ikona se vrsi u tri koraka:
1. Podesi se
OwnerDraw property za stavke menija na "true". Nakon ovoga jos uvek se moze videti meni u design okruzenju i menjati se, po zelji, njegov Text property.
2. Sada moramo videti koliko nam stavke u meniju zauzimaju prostora, kako bi smo unapred planirali prostor za stavku sa slikom (handl-ujemo
MeasureItem event):
Code:
private void mnu_MeasureItem(object sender, System.Windows.Forms.MeasureItemEventArgs e)
{
// kreiras mnuItem koji predstavlja trenutnu stavku u meniju
MenuItem mnuItem = (MenuItem)sender;
Font menuFont = new Font("Tahoma", 8);
// Izmeri se koliko je pixela potrebno da se prikaze tekst
// Dodamo 30 piksela (u ovom slucaju) na sirinu kako bi smo ostavili prostora za sliku
e.ItemHeight = (int)e.Graphics.MeasureString(mnuItem.Text, menuFont).Height + 5;
e.ItemWidth = (int)e.Graphics.MeasureString(mnuItem.Text, menuFont).Width + 30;
}
Mozes koristiti ovaj jedan event handler za premeravanje svih stavki, odn. ne moras da pises poseban handler za svaku stavku u meniju posebno.
3. Iscrtamo tekst i sliku (
DrawItem event):
Code:
private void mnu_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
{
// kreiras mnuItem koji predstavlja trenutnu stavku u meniju
MenuItem mnuItem = (MenuItem)sender;
// Ovo je za "highlighted background" ukoliko je stavka selektovana
// U suprotnom je default siva pozadina
e.DrawBackground();
// Preuzmemo sliku iz ImageList kontrole
Image menuImage = imgMenu.Images[mnuItem.Index];
// Iscrtamo sliku.
e.Graphics.DrawImage(menuImage, e.Bounds.Left + 3, e.Bounds.Top + 2);
// Iscrtamo tekst uz dodatu boju...
e.Graphics.DrawString(mnuItem.Text, e.Font, new SolidBrush(e.ForeColor), e.Bounds.Left + 25, e.Bounds.Top + 3);
}
I to je to... Nadam se da ce pomoci. Ukoliko je nesto nejasno, pitaj...
Never argue with an idiot. They
will drag you down to their level, then
beat you with
experience.
Milan
Petrovic | Blog