鼠标悬停时禁用或删除menustrip项目背景 [英] Disable or remove menustrip item background when mouse over
本文介绍了鼠标悬停时禁用或删除menustrip项目背景的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的winform中有一个菜单条。我在此添加了项目。虽然我将鼠标悬停在菜单条带上,但背景颜色会随着固定的颜色系统颜色而变化。
我想删除此背景。我尝试使用鼠标悬停和悬停事件,改变颜色和背景图像更改。但我仍然没有得到所需。
推荐答案
>> ...我想删除此背景...
>> … I want to remove this background …
为了实现这一目标,您可以尝试覆盖相关方法,就像下面显示的代码一样。
In order to achieve this goal, you can try to override related methods, just like code shown as follows.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
menuStrip1.Renderer = new MenuItemRenderer();
}
private void item1ToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show("click item1");
}
}
class MenuBarColor : ProfessionalColorTable
{
// mainmenutirp bg color
Color ManuBarCommonColor = Color.Transparent;
// all items border
Color MenuBorderColor = Color.Black;
// mianmenutrip border
Color MenuItemBorderColor = Color.Transparent;
public MenuBarColor()
{
}
#region
public override Color MenuItemPressedGradientBegin
{
get
{
return ManuBarCommonColor;
}
}
public override Color MenuItemPressedGradientEnd
{
get
{
return ManuBarCommonColor;
}
}
public override Color MenuItemPressedGradientMiddle
{
get
{
return ManuBarCommonColor;
}
}
public override Color ButtonSelectedHighlight
{
get
{
return ManuBarCommonColor;
}
}
public override Color MenuItemSelectedGradientBegin
{
get
{
return ManuBarCommonColor;
}
}
public override Color MenuItemSelectedGradientEnd
{
get
{
return ManuBarCommonColor;
}
}
public override Color MenuBorder
{
get
{
return MenuBorderColor;
}
}
public override Color MenuItemBorder
{
get
{
return MenuItemBorderColor;
}
}
#endregion
}
class MenuItemRenderer : ToolStripProfessionalRenderer
{
// text
Font textFont = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
private Color menuItemSelectedColor = Color.Black;
private Color menuItemBorderColor = Color.Red;
public MenuItemRenderer() : base(new MenuBarColor())
{
// item bg color
this.menuItemSelectedColor = Color.Transparent;
// item border
this.menuItemBorderColor = Color.Transparent;
}
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
{
e.TextFont = textFont;
if (e.Item.IsOnDropDown)
{
e.TextColor = Color.Black;
}
base.OnRenderItemText(e);
}
protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
{
if (e.Item.IsOnDropDown)
{
if (e.Item.Selected == true && e.Item.Enabled)
{
DrawMenuDropDownItemHighlight(e);
}
}
else
{
base.OnRenderMenuItemBackground(e);
}
}
private void DrawMenuDropDownItemHighlight(ToolStripItemRenderEventArgs e)
{
Rectangle rect = new Rectangle();
rect = new Rectangle(2, 0, (int)e.Graphics.VisibleClipBounds.Width - 4, (int)e.Graphics.VisibleClipBounds.Height - 1);
using (SolidBrush brush = new SolidBrush(menuItemSelectedColor))
{
e.Graphics.FillRectangle(brush, rect);
}
using (Pen pen = new Pen(menuItemBorderColor))
{
e.Graphics.DrawRectangle(pen, rect);
}
}
}
问候,
Stanly
这篇关于鼠标悬停时禁用或删除menustrip项目背景的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文