2011-07-08 79 views
15

有沒有方法在MenuItem中的文本旁放置圖標?如何在MenuItem中放置圖標

我用下面的代碼顯示彈出菜單,當用戶在用戶控制權點擊:

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

我想提出一個圖標,以「測試」字符串的左邊,在彈出的菜單,以便用戶更容易識別它。有沒有辦法做到這一點,而不是通過將OwnerDraw屬性設置爲true(因此要求我自己完全繪製菜單項,就像在此示例中完成的那樣:http://www.codeproject.com/KB/menus/cs_menus.aspx)?

任何幫助表示讚賞。

+1

你可以用'ContextMenuStrip'和'ToolStripMenuItem'來代替嗎?在這種情況下,您可以設置'ToolStripMenuItem.Image'。 http://msdn.microsoft.com/en-us/library/system.windows.forms.contextmenustrip.aspx – Bolu

回答

18

嘗試使用ContextMenuStrip並向其中添加ToolStripMenuItems。

如果您必須使用MenuItem,則必須通過將OwnerDraw屬性設置爲true的DrawItem事件來完成此操作。

+0

ContextMenuStrip肯定會完成這項工作。我不知道它存在。非常感謝! –

1

使用ContextMenuStrip控件,您可以通過單擊該項目並選擇「設置圖像...」或通過更改ToolStripMenuItem的Image屬性以編程方式在設計器中執行此操作。

+0

你確定這個答案適用於winform嗎? – Bolu

+0

@Bolu - 看看這個鏈接 - http://msdn.microsoft.com/en-us/library/system.windows.controls.menuitem.icon.aspx – Bibhu

+0

System.Windows.Forms.MenuItem沒有這樣的一個屬性至少不在.Net 2.0中 –

9

這是6年前.NET 2.0版本修復的。它獲得了ToolStrip類。代碼非常相似:

 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

如果你是綁MenuItem,那麼我已經找到了解決辦法是這樣的一個:

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

希望這有助於。