2011-07-08 15 views
15

¿Hay alguna manera de poner un ícono al lado del texto en un elemento de menú?Cómo poner un ícono en un elemento de menú

uso el siguiente código para mostrar un menú emergente cuando el usuario hace clic derecho en un control de usuario:

ContextMenu menu = new ContextMenu(); 
MenuItem item = new MenuItem("test", OnClick); 
menu.MenuItems.Add(item); 
menu.Show(this, this.PointToClient(MousePosition)); 

me gustaría poner un icono a la izquierda de la cadena "prueba" en la ventana emergente menú para que el usuario lo reconozca más fácilmente. ¿Hay alguna manera de hacer esto que no sea establecer la propiedad OwnerDraw en verdadero (lo que me exige dibujar completamente el elemento del menú, como se hace en este ejemplo: http://www.codeproject.com/KB/menus/cs_menus.aspx)?

Cualquier ayuda es apreciada.

+1

¿puedes usar 'ContextMenuStrip' con' ToolStripMenuItem' en su lugar? En ese caso, puede establecer 'ToolStripMenuItem.Image'. http://msdn.microsoft.com/en-us/library/system.windows.forms.contextmenustrip.aspx – Bolu

Respuesta

18

Pruebe usar ContextMenuStrip y agregue ToolStripMenuItems a él.

Si tiene que usar MenuItem, tendrá que hacerlo a través del evento DrawItem con la propiedad OwnerDraw establecida en true.

+0

ContextMenuStrip sin duda hace el trabajo. No sabía que existía. ¡Muchas gracias! –

1

Utilice el control ContextMenuStrip, ya que puede hacerlo en el diseñador, haciendo clic en el elemento y seleccionando "Establecer imagen ...", o programáticamente cambiando la propiedad Imagen del ToolStripMenuItem.

+0

¿Estás seguro de que esta respuesta funciona para winform? – Bolu

+0

@Bolu - Eche un vistazo a este enlace- http://msdn.microsoft.com/en-us/library/system.windows.controls.menuitem.icon.aspx – Bibhu

+0

System.Windows.Forms.MenuItem no tiene tales una propiedad al menos no en .Net 2.0 –

9

Esto se solucionó hace 6 años con el lanzamiento de .NET 2.0. Adquirió las clases ToolStrip. El código es muy similar:

 var menu = new ContextMenuStrip(); 
     var item = new ToolStripMenuItem("test"); 
     item.Image = Properties.Resources.Example; 
     item.Click += OnClick; 
     menu.Items.Add(item); 
     menu.Show(this, this.PointToClient(MousePosition)); 
4

Si está atado a MenuItem, a continuación, he encontrado que la solución sea como éste:

var dropDownButton = new ToolBarButton(); 
dropDownButton.ImageIndex = 0; 
dropDownButton.Style = ToolBarButtonStyle.DropDownButton; 

var mniZero = new MenuItem("Zero", (o, e) => DoZero()); 
mniZero.OwnerDraw = true; 
mniZero.DrawItem += delegate(object sender, DrawItemEventArgs e) { 
    double factor = (double) e.Bounds.Height/zeroIconBmp.Height; 
    var rect = new Rectangle(e.Bounds.X, e.Bounds.Y, 
         (int) (zeroIconBmp.Width * factor), 
         (int) (zeroIconBmp.Height * factor)); 
    e.Graphics.DrawImage(zeroIconBmp, rect); 
}; 

var mniOne = new MenuItem("One", (o, e) => DoOne()); 
mniOne.OwnerDraw = true; 
mniOne.DrawItem += delegate(object sender, DrawItemEventArgs e) { 
    double factor = (double) e.Bounds.Height/oneIconBmp.Height; 
    var rect = new Rectangle(e.Bounds.X, e.Bounds.Y, 
        (int) (oneIconBmp.Width * factor), 
        (int) (oneIconBmp.Height * factor)); 
    e.Graphics.DrawImage(oneIconBmp, rect); 
}; 

dropDownButton.DropDownMenu = new ContextMenu(new MenuItem[]{ 
    mniZero, mniOne, 
}); 

Espero que esto ayude.

Cuestiones relacionadas