Winforms - Как чередовать цвет строк в элементе управления ListView? - PullRequest
5 голосов
/ 19 мая 2010

Использование C # Winforms (3.5).

Можно ли настроить цвета строк так, чтобы они автоматически чередовались при просмотре списка?

Или мне нужно вручную устанавливать цвет строки каждый раз, когда новая строка добавляется в просмотр списка?

На основании статьи MSDN ручной метод будет выглядеть следующим образом:

//alternate row color
if (i % 2 == 0)
{
    lvi.BackColor = Color.LightBlue;
}
else
{
    lvi.BackColor = Color.Beige;
}

Ответы [ 6 ]

5 голосов
/ 19 мая 2010

Боюсь, это единственный способ в Winforms. XAML позволяет это, используя стили.

2 голосов
/ 13 декабря 2017

Установите для свойства ListView OwnerDraw значение true, а затем реализуйте обработчик DrawItem:

    private void listView_DrawItem(object sender, DrawListViewItemEventArgs e)
    {
        e.DrawDefault = true;
        if ((e.ItemIndex%2) == 1)
        {
            e.Item.BackColor = Color.FromArgb(230, 230, 255);
            e.Item.UseItemStyleForSubItems = true;
        }
    }

    private void listView_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
    {
        e.DrawDefault = true;
    }

Этот пример простой, вы можете улучшить его.

0 голосов
/ 28 февраля 2018
        for (int i = 0; i <= listView.Items.Count - 1; i = (i + 2))
        {
            listView.Items[i].BackColor = Color.Gainsboro;
        }

Установите основной фон в меню свойств, затем используйте этот код для установки альтернативного цвета.

0 голосов
/ 13 декабря 2017

Установите для свойства ListView OwnerDraw значение true, а затем реализуйте обработчик DrawItem. Посмотрите здесь: Winforms - Как чередовать цвет строк в элементе управления ListView?

0 голосов
/ 23 апреля 2014

Вы также можете воспользоваться преимуществами чертежа владельца, а не задавать свойства явно. Чертеж владельца менее уязвим для изменения порядка элементов.

Вот как это сделать в Better ListView (сторонний компонент, предлагающий как бесплатные, так и расширенные версии) - это просто обработка события DrawItemBackground:

private void ListViewOnDrawItemBackground(object sender, BetterListViewDrawItemBackgroundEventArgs eventArgs)
{
    if ((eventArgs.Item.Index & 1) == 1)
    {
        eventArgs.Graphics.FillRectangle(Brushes.AliceBlue, eventArgs.ItemBounds.BoundsOuter);
    }
}

результат:

enter image description here

0 голосов
/ 20 мая 2010

Насколько я знаю, WPF позволяет устанавливать стиль на любом элементе управления, используя <Styles/> Но я боюсь, что в winforms это единственный способ.

...