Аватар для plut0
0 / 0 / 1
Регистрация: 15.03.2013
Сообщений: 33

BackColor в listview.items

16.03.2013, 15:30. Показов 3572. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
И так требуется в listview поменять фон элементов, да не просто поменять, а через один.
Решил сделать подобным образом:
C#
1
2
3
4
5
6
7
for (int index = 0; index <= listView1.Items.Count; index++)
            {
                if (index % 2 == 0)
                {
                    listView1.Items(index).BackColor = Color.LightGray;
                }
            }
Но данным образом по неизвестной мне причине студия жалуется на Items. А именно: Невызываемый член "System.Windows.Forms.ListView.Items " не может использоваться в качестве метода.

Добавлено через 1 час 19 минут
И так проблема была в моей собственной тупости и невнимательности.

Цитата Сообщение от plut0 Посмотреть сообщение
listView1.Items(index).BackColor = Color.LightGray;
нужно было index взять в квадратные скобки:
C#
1
 listView1.Items[index].BackColor = Color.LightGray;
Теперь при заполнении бьет ошибку InvalidArgument=Значение '0' недопустимо для 'index'.
просьба помочь.

Добавлено через 9 минут
При изменении начального значения index лист заполняется коректно, но без первого элемента и все равно оригинальным цветом
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.03.2013, 15:30
Ответы с готовыми решениями:

Добавление Items в Listview
Не получается добавить элементы в Listview. Задаю колонки и потом пытаюсь добавить элементы в цикле. ...

ListView. Как сделать неактивным значение items
Здравствуйте Из базы заполняю Listview так SqlCommand cmd = new SqlCommand(&quot;Select name From products Where...

ListView.Items.AddRange Не добовляется массив string[]
У меня есть такой метод private void GetOnline() { listView1.Clear(); string otvet =...

9
 Аватар для GoldenId
142 / 143 / 64
Регистрация: 11.11.2010
Сообщений: 877
Записей в блоге: 10
16.03.2013, 16:36
Без кода сложно сказать. Возможно на момент обращения к 0-му Item'у в listView1 вообще нет элементов.
1
 Аватар для plut0
0 / 0 / 1
Регистрация: 15.03.2013
Сообщений: 33
16.03.2013, 18:45  [ТС]
Цитата Сообщение от GoldenId Посмотреть сообщение
Без кода сложно сказать. Возможно на момент обращения к 0-му Item'у в listView1 вообще нет элементов.
Есть. Я же после заполнения всунул. К тому же если поставить 1 то заполняет. А значит элементы есть)

Добавлено через 1 час 54 минуты
Проблема решена. GoldenId спасибо за ответ, хоть и не совсем то, но помог решить иную проблему.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
16.03.2013, 18:51
Я на прошлом примере, который в одно из тем скидывал вот так пока смог придумать, не удобно везде пихать этот метод RepaintLines(), но события изменения Items не нашёл.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace WinForms_ListViewItems
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            StartPosition = FormStartPosition.CenterScreen;
        }
 
        private void MainForm_Load(object sender, EventArgs e)
        {
            Person[] persons = new Person[]
                {
                    new Person("Черепанов", "Антон", "Олегович"),
                    new Person("Синдеев", "Дмитрий", "Иванович"),
                    new Person("Литвиненко", "Денис", "Андреевич"),
                    new Person("Ахметов", "Вадим", "Валерьевич"),
                    new Person("Алексеев", "Дмитрий", "Владимирович")
                };
            foreach (var person in persons)
                AddToListView(person);
        }
 
        private void AddToListView(Person person)
        {
            int i = listViewPersons.Items.Add(person.FirstName).Index;
            listViewPersons.Items[i].SubItems.Add(person.LastName);
            listViewPersons.Items[i].SubItems.Add(person.Patronymic);
            listViewPersons.Items[i].Tag = person;
            RepaintLines(); //!!!
        }
 
        private void RemoveButton_Click(object sender, EventArgs e)
        {
            foreach (ListViewItem item in listViewPersons.Items)
            {
                if (item.Checked)
                    item.Remove();
                RepaintLines(); //!!!
            }
        }
 
        private void RepaintLines()
        {
            for (int index = 0; index < listViewPersons.Items.Count; index++)
            {
                listViewPersons.Items[index].BackColor = index % 2 == 0 ? Color.LightGray : Color.White;
            }
        }
    }
}
0
 Аватар для GoldenId
142 / 143 / 64
Регистрация: 11.11.2010
Сообщений: 877
Записей в блоге: 10
16.03.2013, 18:54
Цитата Сообщение от plut0 Посмотреть сообщение
Проблема решена. GoldenId спасибо за ответ, хоть и не совсем то, но помог решить иную проблему.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
16.03.2013, 18:55
У тебя ещё проблема была тут: for (int index = 0; index <= listView1.Items.Count; index++)
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
17.03.2013, 01:29
А что перерисовывать нужно только при нажатии кнопки? Перерисовывать нужно, когда перерисовывается сам листбокс. Для этого нужно задать DrawMode = OwnerDrawFixed и прописать событие DrawItem, где рисовать всё, что нужно:
C#
1
2
3
4
5
6
7
        private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
        {
            Brush br = e.Index % 2 == 0 ? Brushes.LightGray : Brushes.White;
            e.Graphics.FillRectangle(br, e.Bounds); //Фон
            e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, Brushes.Black, e.Bounds, StringFormat.GenericDefault);//Текст
            e.DrawFocusRectangle();
        }
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
17.03.2013, 07:18
Нужно для ListView, а это для ListBox

Добавлено через 27 секунд
Сидел голову ломал, думаю почему код не подходит
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
17.03.2013, 07:48
Бес попутал. Но для listView та же самая петрушка почти. Ставим OwnerDraw = True и пишем три события DrawItem, DrawSubItem и DrawColumnHeader. Все три события будут срабатывать только если выбран режим отображения Details, в остальных случаях будет вызываться только DrawItem.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
        {
            Brush br = e.ItemIndex % 2 == 0 ? Brushes.LightGray : Brushes.White;
            e.Graphics.FillRectangle(br, e.Bounds);
            e.DrawText();
            e.DrawFocusRectangle();
        }
 
        private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
        {
            Brush br = e.ItemIndex % 2 == 0 ? Brushes.LightGray : Brushes.White;
            e.Graphics.FillRectangle(br, e.Bounds);
            e.DrawText();
            e.DrawFocusRectangle(e.Bounds);
        }
 
        private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
        {
            e.DrawDefault = true;
        }
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
17.03.2013, 19:49
Так-то рисуется всё, но с косячками, то в режиме GridLines == true и CheckBoxes == true не всё прорисовывается. То линии вообще не прорисовываеются, то чекбоксоввообще не видно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.03.2013, 19:49
Помогаю со студенческими работами здесь

Два listview.Items.Add в одной строке
Нужно в одной строке написать текст двумя разными цветами, делаю так listview1.Items.Add(&quot;text1 &quot;); ...

ListView.Items. Как воткнуть картинку в произвольный SubItem?
Изображеня из SmallImageList вставляются только в нулевой колонке. Можно ли как-то сделать то же для остальных сабитемов?

Как в ListView изменить программно свойство BackColor только одного Item-а?
Как в ListView изменить программно свойство BackColor только одного Item-а? Пожалуста, помогите! Уже 2.5 часа парюсь Зараннее...

ListView и нестандартные items
Всем привет! Коллеги, в Андройде ListView может быть присвоена собственная модель отображения (и конечно е получения) данных. А именно...

Добавить Items в ListView из файла
Здравствуйте, форумчане! У меня есть ListView и данные которые вносятся в него. В загрузке формы, читается файл с данными для ListView....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru