有没有办法在MenuItem中的文本旁边添加一个图标?
当用户右键单击用户控件时,我使用以下代码显示弹出菜单:
ContextMenu menu = new ContextMenu();
MenuItem item = new MenuItem("test", OnClick);
menu.MenuItems.Add(item);
menu.Show(this, this.PointToClient(MousePosition));
我想在弹出菜单中的“test”字符串左侧放置一个图标,以便用户更容易识别它。有没有办法做到这一点,除了将OwnerDraw属性设置为true(因此要求我自己完全绘制菜单项,就像在这个示例中完成的那样:http://www.codeproject.com/KB/menus/cs_menus.aspx)?
感谢任何帮助。
答案 0 :(得分:18)
尝试使用ContextMenuStrip并向其添加ToolStripMenuItems。
如果必须使用MenuItem,则必须通过DrawItem事件并将OwnerDraw属性设置为true来执行此操作。
答案 1 :(得分: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));
答案 2 :(得分: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,
});
希望这有帮助。
答案 3 :(得分:1)
使用ContextMenuStrip控件,您可以在设计器中执行该操作,方法是单击项目并选择“Set image ...”,或者通过更改ToolStripMenuItem的Image属性以编程方式执行。