在C#的Form里,如何在子菜单项前添加图标??

yefeng238 2003-08-21 12:09:08
如何在Form中的mainmenu下的menuItem子菜单前面(即Checked项出现的位置)添加图标?就像.net的菜单方式。
请高手指教。
谢谢!
...全文
205 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
y1g1y1 2003-08-25
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/TopicView1.asp?id=2093334
nyucv 2003-08-23
  • 打赏
  • 举报
回复
UP!
yefeng238 2003-08-23
  • 打赏
  • 举报
回复
请楼上几位朋友指点,
本人在想为子菜单添加图标(C#中),
在imagList中加入了HELP.bmp,同时也把HELP.bmp文件拉到本程序的子文件夹里,
但是还出现以下错误:
未处理的异常: System.ArgumentException: 在类“HelpMenu”中未能找到资源“HelpMenu.HELP.bmp”。


原代码如下:
using System;
using System.Drawing;
using System.Windows.Forms;
class HelpMenu: Form
{
private System.Windows.Forms.ImageList imageList1;
private System.ComponentModel.IContainer components;
Bitmap bmHelp;
public static void Main()
{
Application.Run(new HelpMenu());
}
public HelpMenu()
{
Text = "Help Menu";
bmHelp = new Bitmap(GetType(), "HelpMenu.HELP.bmp");
Menu = new MainMenu();
Menu.MenuItems.Add("&Help");
MenuItem mi = new MenuItem("&Help");
mi.OwnerDraw = true;
mi.Click += new EventHandler(MenuHelpOnClick);
mi.DrawItem += new DrawItemEventHandler(MenuHelpOnDrawItem);
mi.MeasureItem +=
new MeasureItemEventHandler(MenuHelpOnMeasureItem);
Menu.MenuItems[0].MenuItems.Add(mi);
}
void MenuHelpOnMeasureItem(object obj, MeasureItemEventArgs miea)
{
miea.ItemWidth = bmHelp.Width;
miea.ItemHeight = bmHelp.Height;
}
void MenuHelpOnDrawItem(object obj, DrawItemEventArgs diea)
{
Rectangle rect = diea.Bounds;
rect.X += diea.Bounds.Width - bmHelp.Width;
rect.Width = bmHelp.Width;
diea.DrawBackground();
diea.Graphics.DrawImage(bmHelp, rect);
}
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Resources.ResourceManager resources = new System.Resource
.Resource
Manager(typeof(HelpMenu));
this.imageList1 = new System.Windows.Forms.ImageList(this.compon
nts);
//
// imageList1
//
this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Dep
h8Bit;
this.imageList1.ImageSize = new System.Drawing.Size(16, 16);
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListSt
eamer)(re
sources.GetObject("imageList1.ImageStream")));
this.imageList1.TransparentColor = System.Drawing.Color.Transpar
nt;
//
// HelpMenu
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(368, 278);
this.Name = "HelpMenu";
}
void MenuHelpOnClick(object obj, EventArgs ea)
{
MessageBox.Show("Help not yet implemented.", Text);
}
}
heroux 2003-08-21
  • 打赏
  • 举报
回复
应当查一些第三方的代码,因为vs.net的menu组件本身不提供这种功能。
冷月孤峰 2003-08-21
  • 打赏
  • 举报
回复
c#本身实现不了这种功能,要到网上下载能实现这种功能的组件。
http://expert.csdn.net/Expert/topicview.asp?id=1803226
Knight94 2003-08-21
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topicview.asp?id=1803226
cnhgj 2003-08-21
  • 打赏
  • 举报
回复
记得要把OwnerDraw设为true
cnhgj 2003-08-21
  • 打赏
  • 举报
回复
private void menuItem1_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
{

string myCaption = "Owner Draw Item1";

// Create a Brush and a Font with which to draw the item.
Brush myBrush = System.Drawing.Brushes.AliceBlue;
Font myFont = new Font(FontFamily.GenericSerif, 14, FontStyle.Underline, GraphicsUnit.Pixel);
SizeF mySizeF = e.Graphics.MeasureString(myCaption, myFont);

// Draw the item, and then draw a Rectangle around it.
e.Graphics.DrawString(myCaption, myFont, myBrush, e.Bounds.X, e.Bounds.Y);
e.Graphics.DrawRectangle(Pens.Black, new Rectangle(e.Bounds.X, e.Bounds.Y, Convert.ToInt32(mySizeF.Width), Convert.ToInt32(mySizeF.Height)));

}

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧