当我悬停在一个ToolStripMenuItem
上时,它会显示它周围的边框,即使它是禁用的。有什么财产可以移除吗?
我寻找过像Hover
或Border
这样的属性,但没有发现任何有用的东西。
发布于 2017-11-11 18:30:59
默认情况下,ToolStripProfessionalRenderer
使用MenuItemBorder
属性ProfessionalColorTable
绘制边框。
若要使已启用菜单项的边框可见,可以创建自定义ProfessionalColorTable
和自定义ToolStripProfessionalRenderer
,并添加返回默认边框颜色的新MenuItemEnabledBorder
,还可以重写MenuItemBorder
以返回Color.Transparent
。
然后,在您的自定义呈现程序中,当项目被高亮时,覆盖OnRenderMenuItemBackground
并使用MenuItemEnabledBorder
绘制边框就足够了。
码
public class MyColorTable : ProfessionalColorTable
{
public override Color MenuItemBorder { get { return Color.Transparent; } }
public Color MenuItemEnabledBorder { get { return base.MenuItemBorder; } }
}
public class MyRenderer : ToolStripProfessionalRenderer
{
public MyRenderer() : base(new MyColorTable()) { }
protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs e)
{
base.OnRenderMenuItemBackground(e);
if (e.Item.Enabled && e.Item.Selected)
{
using (var pen = new Pen(((MyColorTable)ColorTable).MenuItemEnabledBorder))
{
var r = new Rectangle(2, 0, e.Item.Width - 4, e.Item.Height - 1);
e.Graphics.DrawRectangle(pen, r);
}
}
}
}
然后,要使用渲染器,只需将其设置为工具条的呈现器:
this.toolStrip1.Renderer = new MyRenderer();
发布于 2017-11-11 18:32:02
您可以重写ToolStripProfessionalRenderer
类并将颜色传递给它的基类构造函数(如果不希望边框传递原始BackColor):
namespace WindowsFormsApplication11
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
menuStrip1.Renderer = new CustomColors();
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
private class CustomColors : ToolStripProfessionalRenderer
{
public CustomColors() : base(new MyColors()) { }
}
private class MyColors : ProfessionalColorTable
{
public override Color MenuItemSelected
{
get { return Color.GreenYellow; }
}
public override Color MenuItemSelectedGradientBegin
{
get { return Color.DarkBlue; }
}
public override Color MenuItemSelectedGradientEnd
{
get { return Color.Yellow; }
}
}
}
https://stackoverflow.com/questions/47241021
复制相似问题