Lan*_*Lan 0 c# contextmenustrip winforms
我正在开发.net 2.0中的winforms应用程序.
我想知道如何在附加到通知图标的contextmenustrip中显示徽标.
它不是文本旁边显示的那种图标.它是跨越整行的那种,通常用于显示公司徽标.抱歉,我还不能发布图片.
编辑:
ContextMenuStrip1.Items.Add(new ToolStripMenuItem(String, Image) )
Run Code Online (Sandbox Code Playgroud)
但是,这只给我一个图标,其中一行旁边有一些文本,当光标悬停在它上面时,它会突出显示.
我想要实现的是在没有任何文本的情况下在单行上显示图像,并且当光标悬停或可点击时它不能突出显示.
解决方案非常简单.您必须使用自定义ToolStripRenderer并覆盖该OnRenderImageMargin方法.您还需要准备一个合适尺寸的徽标图像.
这是代码:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
注意:您的图像应已旋转90度.否则,您必须在绘制之前使用代码旋转它.
以下是使用Stack Overflow徽标的上述代码的屏幕截图:

编辑后,看起来你想要一些不同的东西.您可能希望显示拉伸项目整个区域的徽标.我想这是最后一项.你必须添加一个项目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);
}
}
Run Code Online (Sandbox Code Playgroud)
截屏:

| 归档时间: |
|
| 查看次数: |
599 次 |
| 最近记录: |