在contextmenustrip中显示徽标

时间:2013-08-14 16:01:03

标签: c# winforms contextmenustrip

我正在开发.net 2.0中的winforms应用程序。

我想知道如何在附加到通知图标的contextmenustrip中显示徽标。

这不是文本旁边显示的那种图标。它是跨越整行的那种,通常用于显示公司徽标。抱歉我无法发布图片。

修改

ContextMenuStrip1.Items.Add(new ToolStripMenuItem(String, Image) )

但是,这只给了我一个图标,旁边有一些文字在一行中,当光标悬停在它上面时,它会突出显示。

我想要实现的是在没有任何文本的情况下在单行上显示图像,并且当光标悬停或可点击时无法突出显示。

1 个答案:

答案 0 :(得分:5)

解决方案非常简单。您必须使用自定义ToolStripRenderer并覆盖OnRenderImageMargin method。您还需要准备一个合适尺寸的徽标图像。

以下是代码:

public class Form1 : Form {
   public Form1(){
      InitializeComponent();
      // This contextMenuStrip is used for your Notify Icon
      // Just show it as you do
      contextMenuStrip1.Renderer = new CustomRenderer();
   }
}
public class CustomRenderer : ToolStripProfessionalRenderer
{            
   protected override void OnRenderImageMargin(ToolStripRenderEventArgs e)
   {
      e.Graphics.DrawImage(yourImage, e.AffectedBounds);
   }
}

注意:您的图片应已旋转90度。否则,您必须在绘制之前使用代码旋转它。

以上是使用Stack Overflow徽标的上述代码的屏幕截图:

enter image description here

编辑后,看起来你想要一些不同的东西。您可能希望显示拉伸项目整个区域的徽标。我想这是最后一项。您必须使用Text = string.Empty添加项目。这是代码:

public class Form1 : Form {
   public Form1(){
      InitializeComponent();
      // This contextMenuStrip is used for your Notify Icon
      // Just show it as you do
      contextMenuStrip1.Renderer = new CustomRenderer(){RootToolStrip = contextMenuStrip1};
      //Add your last item first
      int lastItemIndex = contextMenuStrip1.Items.Count - 1;
      contextMenuStrip1.Items[lastItemIndex].AutoSize = false;
      contextMenuStrip1.Items[lastItemIndex].Text = "";
      contextMenuStrip1.Items[lastItemIndex].Height = 40;
   }
}
public class CustomRenderer : ToolStripProfessionalRenderer
{    
   public ToolStrip RootToolStrip;        
   protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
   {
        int i = e.ToolStrip.Items.Count - 1;
        if (e.ToolStrip.Items.IndexOf(e.Item) == i&&e.ToolStrip == RootToolStrip)
        {
           e.Graphics.DrawImage(yourImage, new Rectangle(0,0,e.Item.Width, e.Item.Height));
        } else base.OnRenderMenuItemBackground(e);
   }
}

屏幕截图:

enter image description here