2011-07-08 11 views
15

Czy istnieje sposób na umieszczenie ikony obok tekstu w MenuItem?Jak umieścić ikonę w MenuItem

używam następujący kod, aby wyświetlić menu kontekstowe, gdy użytkownik prawym kliknie w kontroli użytkownika:

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

chciałbym umieścić ikonę po lewej stronie „test” string w popup menu, aby użytkownik łatwiej go rozpoznał. Czy istnieje sposób, aby zrobić to inaczej, niż ustawiając właściwość OwnerDraw na wartość true (wymagając ode mnie całkowitego narysowania elementu menu, tak jak w tym przykładzie: http://www.codeproject.com/KB/menus/cs_menus.aspx)?

Każda pomoc jest doceniana.

+1

Czy zamiast tego można użyć 'ContextMenuStrip' z' ToolStripMenuItem'? W takim przypadku możesz ustawić "ToolStripMenuItem.Image". http://msdn.microsoft.com/en-us/library/system.windows.forms.contextmenustrip.aspx – Bolu

Odpowiedz

18

Spróbuj użyć ContextMenuStrip i dodaj do niego ToolStripMenuItems.

Jeśli musisz użyć MenuItem, będziesz musiał to zrobić poprzez zdarzenie DrawItem z ustawioną właściwością OwnerDraw na wartość true.

+0

ContextMenuStrip z pewnością wykonuje zadanie. Nie wiedziałem, że to istnieje. Wielkie dzięki! –

1

Użyj kontrolki ContextMenuStrip, aby to zrobić w projektancie, klikając element i wybierając "Ustaw obraz ..." lub programowo, zmieniając właściwość Image elementu ToolStripMenuItem.

+0

czy na pewno ta odpowiedź działa dla winform? – Bolu

+0

@Bolu - zajrzyj do tego linku - http://msdn.microsoft.com/en-us/library/system.windows.controls.menuitem.icon.aspx – Bibhu

+0

System.Windows.Forms.MenuItem nie ma takich właściwość przynajmniej nie w .Net 2.0 –

9

Zostało to naprawione 6 lat temu w wersji .NET 2.0. Nabył klasy ToolStrip. Kod jest bardzo podobna:

 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

Jeśli jesteś przywiązany do MenuItem, potem znalazłem rozwiązanie być podobny do tego:

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

Nadzieja to pomaga.

Powiązane problemy