ContextMenuItem の一部である ToolStripMenuItem に BackgroundImage を設定しました。
マウスオーバーすると背景画像が消えます。その上に青い「ハイライト」ボックスが表示されます(少なくとも、それが起こっていると思います)。
マウスが上にあるときに背景画像を表示するにはどうすればよいですか?
MouseEnter イベントで画像を設定しようとしましたが、うまくいきませんでした。
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);
}
}
フォームコンストラクターにあるコントロールのrenderesを設定します-toolstrip(toolstrippbackground、toolstripbutton、contexmenustripなど)からすべてに対して機能します
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
これを行うには、カスタム レンダラーを使用する必要があります。
contextMenuStrip1.Renderer = new BackgroundImageRenderer();
必要に応じて変数をカスタマイズします。
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);
}
}
}
}
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);
}
}
これは私のために働いた