我在我的ToolStripMenuItem上设置了一个属于ContextMenuItem的BackgroundImage。
当我将鼠标移到它上面时,背景图像就消失了。蓝色的“高亮”框出现在它的上方(至少我认为是这样)。
当鼠标悬停在背景图像上时,如何显示背景图像?
我尝试在MouseEnter事件中设置图像,但没有成功。
发布于 2013-06-14 10:57:41
为此,您需要使用自定义渲染器。
在ContextMenuStrip上设置渲染器
contextMenuStrip1.Renderer = new BackgroundImageRenderer();
添加这个"Renderer Class“
根据需要自定义变量。
private class BackgroundImageRenderer : ToolStripProfessionalRenderer
{
protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
{
if (!e.Item.Selected)
{
base.OnRenderMenuItemBackground(e);
}
else
{
if (e.Item.Name == "theNameOfMyToolStripMenuItem")
{
Image backgroundImage = global::YourProject.Properties.Resources.ImageFileName;
e.Graphics.DrawImage(backgroundImage, 0, 0, e.Item.Width, e.Item.Height);
}
else {
base.OnRenderMenuItemBackground(e);
}
}
}
}
发布于 2013-06-14 11:53:37
创建一个从ToolStripProfessionalRenderer派生的类
public class customRenderer : ToolStripProfessionalRenderer
{
protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e)
{
// check if the object being rendered is actually a ToolStripButton
if (e.Item is ToolStripButton)
{
ToolStripButton button = e.Item as ToolStripButton;
// only render checked items differently
if (button.Checked || button.Selected)
{
//do work here
}
else
base.OnRenderButtonBackground(e);
}
// if this object is not a ToolStripButton, use the normal render event
else
base.OnRenderButtonBackground(e);
}
protected override void OnRenderItemBackground(ToolStripItemRenderEventArgs e)
{
//do checking here like above
base.OnRenderItemBackground(e);
}
}
设置窗体构造器上的控件的渲染器-从toolstrip(toolstrip because,toolstripbutton,contexmenustrip,等等)中设置所有控件的渲染器。我刚刚重写了OnRenderButtonBackground,因为您提到了这一点,您可以重写ToolStripProfessionalRenderer的其他方法
toolStrip1.Renderer = new customRenderer();//if you have this and want to override any behaviour
menuStrip1.Renderer = new customRenderer();//if you have this and want to override any behaviour
contextMenuStrip1.Renderer = new customRenderer();//if you have this and want to override any behaviour
发布于 2014-04-16 17:43:14
public class customRenderer : ToolStripProfessionalRenderer
{
protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e)
{
// check if the object being rendered is actually a ToolStripButton
if (e.Item is ToolStripButton)
{
ToolStripButton button = e.Item as ToolStripButton;
// only render checked items differently
if (button.Checked || button.Selected)
{
//do work here
}
else
base.OnRenderButtonBackground(e);
}
// if this object is not a ToolStripButton, use the normal render event
else
base.OnRenderButtonBackground(e);
}
protected override void OnRenderItemBackground(ToolStripItemRenderEventArgs e)
{
//do checking here like above
base.OnRenderItemBackground(e);
}
}
这对我很有效
https://stackoverflow.com/questions/17100380
复制相似问题