答案 0 :(得分:46)
这是“系统”渲染器中的错误,详情请参见this bug report。
微软的回复提供了一个非常简单的解决方法:
1)创建一个ToolStripSystemRenderer
的子类,覆盖OnRenderToolStripBorder
并使其成为无操作:
public class MySR : ToolStripSystemRenderer
{
public MySR() { }
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
//base.OnRenderToolStripBorder(e);
}
}
2)使用该渲染器作为工具条:
toolStrip3.Renderer = new MySR();
答案 1 :(得分:9)
您可能需要添加类型检查以避免在ToolStripDropDownMenu
/等上丢失边框。 (由于继承自ToolStrip
,它会自动启动相同的自定义渲染器用法):
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
if (e.ToolStrip.GetType() == typeof(ToolStrip))
{
// skip render border
}
else
{
// do render border
base.OnRenderToolStripBorder(e);
}
}
使用ToolStripDropDownMenu
时,错过的ToolStripSystemRenderer
边框并不那么明显,但ToolStripProfessionalRenderer
会成为真正的眼睛。
另外,如果您希望appwide的所有System.Windows.Forms.ToolStripManager.Renderer = new MySR();
个实例默认使用ToolStrip
,那么设置MySR
可能会很有用。
答案 2 :(得分:1)
比其他课程更完整!
public class ToolStripRender : ToolStripProfessionalRenderer
{
public ToolStripRender() : base() { }
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
if (!(e.ToolStrip is ToolStrip))
base.OnRenderToolStripBorder(e);
}
}