Я хочу изменить цвет выбранных элементов из списка, как это сделать в окнах (Winforms)

1
vichu_s84 7 Авг 2009 в 13:39

2 ответа

Насколько я знаю, если вы хотите это сделать, вам нужно сделать ListBox.DrawMode OwnerDrawFixed и добавить обработчик событий в метод DrawItem.

Что-то вроде этого может сделать то, что вы хотите:

    private void lstDrawItem(object sender, DrawItemEventArgs e)
    {
        ListBox lst = (ListBox)sender;
        e.DrawBackground();
        e.DrawFocusRectangle();

        DrawItemState st = DrawItemState.Selected ^ DrawItemState.Focus;
        Color col = ((e.State & st) == st) ? Color.Yellow : lst.BackColor;

        e.Graphics.DrawRectangle(new Pen(col), e.Bounds);
        e.Graphics.FillRectangle(new SolidBrush(col), e.Bounds);
        if (e.Index >= 0)
        {
            e.Graphics.DrawString(lst.Items[e.Index].ToString(), e.Font, new SolidBrush(lst.ForeColor), e.Bounds, StringFormat.GenericDefault);
        }
    }

Надеюсь, это поможет Джеймсу

8
JDunkerley 7 Авг 2009 в 17:11
+1 - Это тоже очень похоже на нашу реализацию.
 – 
Refracted Paladin
7 Авг 2009 в 17:17

Предполагая, что вы работаете с WinForms:

Большинство элементов управления будут иметь свойства BackColor и BorderColor. Вы можете добавить объекты Color в свой список (название цвета должно отображаться, поскольку Color.ToString() возвращает имя), затем использовать listbox.SelectedItems[0], чтобы получить цвет и обновить BackColor других элементов управления и т. д. .

0
Neil Barnwell 7 Авг 2009 в 13:44
Элементы списка имеют тип System.Object, без фона.
 – 
Henk Holterman
7 Авг 2009 в 17:07
Ой. Я думал, что ОП спрашивал, как изменить цвет элемента управления на основе выбора в списке. Я не понимал, что он хотел, чтобы каждый элемент списка имел свой цвет. Ну что ж. Легко пришло, легко ушло.
 – 
Neil Barnwell
7 Авг 2009 в 17:56