如何在.Net中固定上下文菜单项的高度(即按比例缩放到特定项目的大小)?

时间:2010-01-27 00:29:28

标签: .net winforms contextmenu menuitem

请参阅下面的两张图片。我不希望菜单中的每个项目都是最大的高度。它应该适合内容的大小。我玩了很多属性并且无法阻止这种行为。有可能吗?

Desired Height http://www.blakerobertson.com/storage/perm/contextNormal.png Fixed Height For all! http://www.blakerobertson.com/storage/perm/contextThick.png

2 个答案:

答案 0 :(得分:2)

MenuItem.OwnerDraw设置为true,然后处理MenuItem.MeasureItem事件。这允许您告诉Windows窗体这个菜单项的大小,与其他菜单项的大小无关,尽管这样做的代价是必须自己渲染项目。

请注意,会导致自动调整大小:您需要使用GDI +函​​数来计算所需的大小。

答案 1 :(得分:0)

旧问题,但我对ToolStripMenuItem显示的NotifyIcon也有同样的问题。解决了设置AutoSize = False,但它没有很好地绘制文本,我无法理解为什么。然后我必须通过我自己处理它的Paint事件来绘制它。

    Private Sub OneMenuItem_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles OneMenuItem.Paint
        If Me.DesignMode Then Return
        Dim g As Graphics = e.Graphics
        Dim it = OneMenuItem
        Dim p = it.GetCurrentParent
        Using b As New Drawing.SolidBrush(it.ForeColor)
            g.DrawString(it.Text, it.Font, b, p.Padding.Left + 4 + it.Padding.Left, p.Padding.Top + 4 + it.Padding.Top)
        End Using
    End Sub
不要问我这些魔法4是什么,他们比较好地比较了DesignMode中的两个绘制文本(它在设计模式下绘制文本,你可以比较)。
VS2008,顺便说一句。