小智 46
微软的回复提供了一个非常简单的解决方法:
1)创建一个子类ToolStripSystemRenderer,覆盖OnRenderToolStripBorder并使其成为无操作:
public class MySR : ToolStripSystemRenderer
{
public MySR() { }
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
//base.OnRenderToolStripBorder(e);
}
}
Run Code Online (Sandbox Code Playgroud)
2)使用该渲染器作为工具条:
toolStrip3.Renderer = new MySR();
Run Code Online (Sandbox Code Playgroud)
小智 9
您可能希望添加类型检查以避免错过ToolStripDropDownMenu/ etc 上的边框.(从继承自ToolStrip,它会自动启动相同的自定义渲染器用法):
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
if (e.ToolStrip.GetType() == typeof(ToolStrip))
{
// skip render border
}
else
{
// do render border
base.OnRenderToolStripBorder(e);
}
}
Run Code Online (Sandbox Code Playgroud)
错过的ToolStripDropDownMenu边界在使用时并不那么明显,ToolStripSystemRenderer但却成为真正的眼睛ToolStripProfessionalRenderer.
此外,System.Windows.Forms.ToolStripManager.Renderer = new MySR();如果您希望默认情况下ToolStrip使用appwide的所有实例,则设置可能很有用MySR.