在使用ToolStripSystemRenderer时,丢失的ToolStripDropDownMenu边框并不那么明显,但在使用ToolStripProfessionalRenderer时,它会成为真实的的眼中钉。 此外,如果您希望应用程序范围内的所有ToolStrip示例默认使用MySR,则设置System.Windows.Forms.ToolStripManager.Renderer = new MySR();可能很有用。
public class ToolStripRender : ToolStripProfessionalRenderer
{
public ToolStripRender() : base() { }
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
if (!(e.ToolStrip is ToolStrip))
base.OnRenderToolStripBorder(e);
}
}
4条答案
按热度按时间9cbw7uwe1#
这是“系统”渲染器中的一个错误,详细信息在this bug report中。
微软的回应提供了一个非常简单的解决方案:
1)创建
ToolStripSystemRenderer
的子类,覆盖OnRenderToolStripBorder
并使其成为无操作:2)将该渲染器用于toolstrip。该渲染器必须在 * 对toolstrip的RenderMode属性进行任何赋值 * 之后赋值,否则它将被对System.Windows.Forms渲染器的引用覆盖。
ax6ht2ek2#
您可能需要添加类型检查,以避免在
ToolStripDropDownMenu
/etc上丢失边框(由于继承自ToolStrip
,因此它会自动启动相同的自定义渲染器):在使用
ToolStripSystemRenderer
时,丢失的ToolStripDropDownMenu
边框并不那么明显,但在使用ToolStripProfessionalRenderer
时,它会成为真实的的眼中钉。此外,如果您希望应用程序范围内的所有
ToolStrip
示例默认使用MySR
,则设置System.Windows.Forms.ToolStripManager.Renderer = new MySR();
可能很有用。e4eetjau3#
这门课比其他课更完整!
mccptt674#
建议的只隐藏工具条边框而不隐藏下拉菜单边框的解决方案不起作用。
这就是诀窍所在: