Настройка внешнего вида поля со списком Windows Forms - PullRequest
0 голосов
/ 01 февраля 2011

Вот что я делаю:

Public Class ComboBox
    Inherits System.Windows.Forms.ComboBox

    Public Sub New()
        SetStyle(ControlStyles.OptimizedDoubleBuffer _
        Or ControlStyles.UserPaint, True)
    End Sub

    Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
        e.Graphics.FillRectangle(gradient, ClientRectangle)
        // The preceding line is a simplification of about 50 lines of code.

        If Not String.IsNullOrEmpty(Text) Then
            Dim rect As New Rectangle(2, 0, Width - 2, Height)

            Using format As New StringFormat()
                format.LineAlignment = StringAlignment.Center

                Using brush As New SolidBrush(ForeColor)
                    e.Graphics.DrawString(Text, Font, brush, rect, format)
                End Using
            End Using
        End If

        e.Graphics.FillPolygon(Brushes.Black, New Point() { _
        New Point(Width - 5, Height \ 2 - 1), _
        New Point(Width - 12, Height \ 2 - 1), _
        New Point(Width - 9, Height \ 2 + 3)})
    End Sub
End Class

У меня две проблемы:

  1. Его высота всегда 24.
  2. Раскрывающийся список отображается с некрасивым шрифтом Windows 3.1.

http://i56.tinypic.com/w1p4ph.png

Ответы [ 3 ]

1 голос
/ 27 марта 2019

Чтобы устранить проблему со шрифтом, установите стиль UserPaint в OnControlCreated вместо конструктора, например:

    protected override void OnCreateControl()
    {
        base.OnCreateControl();
        SetStyle(ControlStyles.UserPaint, true);
    }
0 голосов
/ 02 февраля 2011

Проблема с высотой почти наверняка, потому что вы наследуете из ComboBox, а затем используете стандартные вызовы API для рисования большей его части, а когда Windows рисует комбинированный список, высота фиксируется размером шрифта и любыми изменениями свойства Height игнорируются.

Аналогично, Windows использует шрифт по умолчанию, потому что вы не меняете его или не настраиваете где-то в вызове API.

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

0 голосов
/ 01 февраля 2011

Ваша проблема явно в части "Полный код". Я предлагаю вам решить одну проблему за один раз:

1) Проблема с высотой: может быть, у вас установлена ​​высота 24, и если вы измените ее высоту, размер элемента управления изменится соответственно? Вы смотрели на свойство Control.PreferredSize? Ищите здесь это: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.preferredsize.aspx

2) Проблема со шрифтом. Это невозможно диагностировать, не глядя на код. Все, что я могу сказать, это убедиться, что вы правильно рисуете выпадающие элементы любым шрифтом, который хотите использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...