Reputation: 16546
I've set a BackgroundImage on my ToolStripMenuItem that is part of a ContextMenuItem.
When I mouse over it, the background image disappears. The blue "highlight" box shows up over it (at least I think that's what's happening).
How can I display a background image when the mouse is over it?
I tried setting the image in an MouseEnter event but no luck.
Upvotes: 2
Views: 2525
Reputation: 4349
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);
}
}
this worked for me
Upvotes: 0
Reputation: 4532
Make a class deriving from 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);
}
}
set the renderes of controls you have on form constructor - works for all from toolstrip(toolstrippbackground,toolstripbutton,contexmenustrip,etc) i just overrided OnRenderButtonBackground because you mention this,you can override other methods of 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
Upvotes: 3
Reputation: 16546
To do this you need to use a custom renderer.
contextMenuStrip1.Renderer = new BackgroundImageRenderer();
Customize the variables as appropriate.
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);
}
}
}
}
Upvotes: 3