4

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

所需高度
(来源:blakerbertson.com

所有人的固定高度!
(来源:blakerbertson.com

4

2 回答 2

2

MenuItem.OwnerDraw设置为 true,然后处理MenuItem.MeasureItem事件。这使您可以独立于其他菜单项的大小告诉 Windows 窗体此菜单项的大小,尽管代价是必须自己呈现该项。

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

于 2010-01-27T00:34:07.167 回答
0

老问题,但我对ToolStripMenuItem显示的 a有同样的问题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 中比较两个绘制的文本效果很好(它在设计模式下绘制文本 ok,你可以比较)。
VS2008,顺便说一句。

于 2015-02-25T14:44:06.673 回答