.NET - [решено] Сменить цвет выделенного элемента ListView.

Аватара пользователя
LilLoco

Re: .NET - [решено] Сменить цвет выделенного элемента ListView.

Сообщение LilLoco »

Чудно, надо будет взять на заметку для своих проектов Изображение
Аватара пользователя
LilLoco

Re: .NET - [решено] Сменить цвет выделенного элемента ListView.

Сообщение LilLoco »

Немного поспешил закрыть тему Изображение



При методе, описанном выше, получается нечто ужасное. Все размывается, пропадает и так далее. Сразу не заметил( при малом количестве итемов). Словами тяжело объяснить,
видео
.



Есть ли идеи почему такое происходит?(
Аватара пользователя
Delirium

Re: .NET - [решено] Сменить цвет выделенного элемента ListView.

Сообщение Delirium »

похоже, проблема из за того,что у тебя нигде не происходит вызов функции invalidate для списка.
Аватара пользователя
LilLoco

Re: .NET - [решено] Сменить цвет выделенного элемента ListView.

Сообщение LilLoco »

Цитата Delirium:



вызов функции invalidate
.NET - [решено] Сменить цвет выделенного элемента ListView.




Если я правильно понял что нужно, сделал при добавлении итемов так :



Код:

Код: Выделить всё

listView1.BeginUpdate();
listView1.Items.Clear();
//Добавляю итемы
listView1.EndUpdate();
listView1.Invalidate();

Ничего не изменяется...



Решение "половины" проблемы найдено. Нужно при выборе областей прорисовки использовать вместо e.Item.Position, e.Bounds.



Отрисовывается вроде бы хорошо, пока что не заметил каких - либо нюансов. Но осталась еще одна половина проблемы - Есть элементы, фон белый, выделяю кликом один элемент(черный цвет). После этого тупо дергаю мышью по области listview, и проведя несколько раз курсором по выделенному элементу, цвет возвращается в белый, после чего выделить (черным) этот же элемент не получается кликом. Сначала нужно выделить другой.
Аватара пользователя
LilLoco

Re: .NET - [решено] Сменить цвет выделенного элемента ListView.

Сообщение LilLoco »

Кажется вторая половина проблемы тоже решена.

Просто добавить дополнительную проверку.





Код:

Код: Выделить всё

else //остальные элементы
                        {
                             if (!e.Item.Selected) //проверка не выделен ли элемент
                             {
                                e.Graphics.FillRectangle (Brushes.Цвет, e.Bounds );
                                e.Graphics.DrawString ("Первая строка", new Font ( "Arial", 10 ), Brushes.Цвет, new Point ( e.Item.Position.X + 36, e.Item.Position.Y ) );
                                brush = new SolidBrush ( Color.FromArgb ( Colors.SecondRowSelected ) );
                                e.Graphics.DrawString ( "Вторая строка", new Font ( "Arial", 10 ), Brushes.Цвет, new Point ( e.Item.Position.X + 36, e.Item.Position.Y + 15 ) );
                               }
                        }

На первый взгляд, все отрисовывается именно так, как хотелось бы. Время покажет)
Ответить

Вернуться в «Программирование и базы данных»