【问题标题】:ToolStrip vs MenuStrip - can I make their rendering identical?ToolStrip vs MenuStrip - 我可以让它们的渲染相同吗?
【发布时间】:2010-12-17 21:56:21
【问题描述】:
我需要在我的应用程序中的菜单条正下方显示一个工具条,但是为每个设置 RenderMode = Professional 并不会给出相同的结果。它们都显示了背景渐变,但不是同一个。
有没有办法为工具条使用菜单条渲染,反之亦然?
或者有人可以建议如何最好地自己实现渐变,我可以在子类渲染器中执行?
稍后添加:
非常感谢nobugz 他在下面的回答。有用的材料也在 this answer。
还有一个问题——如果我将自定义渲染器基于 ToolStripProfessionalRenderer 并覆盖 OnRenderToolstripBackground,我的 ToolStrip 上仍然会出现弯曲的右角,但不会出现在 MenuStrip 上。是否有一些内部逻辑为后台渲染器填充提供不同的区域?我已关闭(被无操作函数覆盖)边框渲染器。
【问题讨论】:
标签:
.net
vb.net
toolstrip
menustrip
【解决方案1】:
我没看到,但可以想象这是个问题。覆盖渲染器,使其对菜单项和工具条项使用相同的背景渲染器:
Public Class Form1
Public Sub New()
InitializeComponent()
MenuStrip1.Renderer = New MyRenderer()
End Sub
Private Class MyRenderer
Inherits ToolStripProfessionalRenderer
Protected Overrides Sub OnRenderItemBackground(ByVal e As ToolStripItemRenderEventArgs)
MyBase.OnRenderMenuItemBackground(e)
End Sub
End Class
End Class
【解决方案2】:
您可以使用DockStyle.Top 将两个面板停靠在彼此的顶部,然后为每个面板添加一个MenuStrip。我在我的应用程序上做了同样的事情,我需要一些 MenuStrips 在相当异国情调的地方。如果您为它们使用连续背景,它可以产生良好的效果。