Как сделать так, чтобы высота элементов контекстного меню не фиксировалась (т.е. масштабируется до размера конкретного элемента) в .Net? - PullRequest
4 голосов
/ 27 января 2010

См. Два изображения ниже. Я не хочу, чтобы каждый пункт в меню был высотой самого большого. Он должен соответствовать размеру содержимого. Я поиграл с рядом свойств и не смог предотвратить такое поведение. Возможно ли это?

Desired Height
(источник: blakerobertson.com )

Fixed Height For all!
(источник: blakerobertson.com )

Ответы [ 2 ]

2 голосов
/ 27 января 2010

Установите MenuItem.OwnerDraw в значение true, затем обработайте событие MenuItem.MeasureItem . Это позволяет сообщать Windows Forms размер этого элемента меню независимо от размера других, хотя и за счет необходимости визуализировать этот элемент самостоятельно.

Обратите внимание, что не приводит к автоматическому подгонке размера: вам нужно использовать функции GDI + для вычисления желаемого размера.

0 голосов
/ 25 февраля 2015

Старый вопрос, но у меня была та же проблема с 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, кстати.

...