Рисование изображений в пользовательском поле со списком - PullRequest
8 голосов
/ 17 ноября 2010

Для текущего проекта мне нужно было выпадающее меню с названиями цветов (строки) с небольшим примером квадрата цвета рядом с ним (изображение).Итак, я смог разработать собственный ComboBox для достижения этой цели.Тем не менее, у меня есть одна проблема .... когда я выбираю элемент из списка, пример цвета не отображается, только имя цвета.(См. Примеры ниже)

Расширенное меню:

alt text

После выбора элемента:

alt text

ВЧтобы нарисовать цвета рядом со строками, для начала я использовал:

    // Draws the items into the ColorSelector object
    protected override void OnDrawItem(DrawItemEventArgs e)
    {
        e.DrawBackground();
        e.DrawFocusRectangle();

        DropDownItem item = (DropDownItem)Items[e.Index];
        // Draw the colored 16 x 16 square
        e.Graphics.DrawImage(item.Image, e.Bounds.Left, e.Bounds.Top);
        // Draw the value (in this case, the color name)
        e.Graphics.DrawString(item.Value, e.Font, new
                SolidBrush(e.ForeColor), e.Bounds.Left + item.Image.Width, e.Bounds.Top + 2);

        base.OnDrawItem(e);
    }

Где DropDownItem содержал изображение и строку для рисования.Итак ... кто-нибудь знает, что мне нужно переопределить или что мне нужно сделать, чтобы ComboBox рисовал изображение и строку, так же, как это уже происходит при расширении списка, когда выбран элемент?

Большое спасибо;Ура!

Ответы [ 3 ]

7 голосов
/ 17 ноября 2010

Установить DropDownStyle на DropDownList; по умолчанию ComboBox использует TextBox для отображения выбранного элемента. Вот почему выбранный элемент отображается иначе, чем выпадающий список.

0 голосов
/ 17 ноября 2010

Вы также должны переопределить OnPaint аналогично методу OnDrawItem, чтобы это работало.

0 голосов
/ 17 ноября 2010

Ознакомьтесь с этой статьей, посмотрите, поможет ли она: http://angelorohit.blogspot.com/2009/04/customizing-items-in-winforms-combobox.html

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