Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
3 / 3 / 1
Регистрация: 25.01.2014
Сообщений: 38
1

Как сделать границы для items в ListBox?

02.04.2014, 09:49. Показов 2235. Ответов 10
Метки нет (Все метки)

Как сделать границы для items в listbox?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.04.2014, 09:49
Ответы с готовыми решениями:

Как сделать Items в ListBox многострочными
У меня есть ListBox который я создаю так:<ListBox x:Name="LBFK"...

Собственный поток для каждого Listbox.Items
В моём примере каждый поток обрабатывает каждое значение из ListBox1: Imports System.Threading...

Как разукрасить items в ListBox
задача такая:нужно цветом отделить записи.Пусть это будет бэкграунд или цвет текста.Я организовал...

ListBox: Свойство Items помечено как ReadOnly
Свойство Items помечено как ReadOnly. Где снять это свойство?

10
985 / 883 / 353
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
02.04.2014, 09:55 2
Для стандартного Listbox если только отрисовать вручную сами элементы. Смотрите в сторону событие DrawItem.
1
3 / 3 / 1
Регистрация: 25.01.2014
Сообщений: 38
02.04.2014, 11:04  [ТС] 3
надо весь листбокс перерисовывать?или можно просто одну DrawLine заюзать?

Добавлено через 50 минут
в цикле в котором наполняю listBox дописал
C#
1
2
listBox_doc.DrawMode = DrawMode.OwnerDrawFixed;
                    listBox_doc.DrawItem += new DrawItemEventHandler(ListBox_DrawItem);
предвадительно создав
C#
1
2
3
4
5
6
private void ListBox_DrawItem(object sender,
                                System.Windows.Forms.DrawItemEventArgs e)
        {            
            Graphics g = e.Graphics;
            g.DrawRectangle(new Pen(Color.Black), e.Bounds);
        }
0
985 / 883 / 353
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
02.04.2014, 11:14 4
Лучший ответ Сообщение было отмечено daem0n как решение

Решение

Перерисовка касается только сами пунктов. Весь элемент управления в Paint разве что перерисуете.
Подписывание на событие в цикл только не выносите, надеюсь знаете, чем это чревато.
C#
1
2
3
4
5
6
7
8
9
        Pen pen = new Pen(Color.DarkBlue);
        private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
        {
            if (e.Index < 0)
                return;
            e.DrawBackground();
            e.Graphics.DrawRectangle(pen, e.Bounds);
            e.Graphics.DrawString((sender as ListBox).Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
        }
1
3 / 3 / 1
Регистрация: 25.01.2014
Сообщений: 38
02.04.2014, 11:37  [ТС] 5
Спасибо!теперь все именно так как нужно.С циклом протупил согласен)
0
3 / 3 / 1
Регистрация: 25.01.2014
Сообщений: 38
03.04.2014, 16:49  [ТС] 6
а почему при увелечении шрифта границы не перерисовываються до нужного размера ?когда увеличиваю шрифт они начинают друг на друга лезть
0
985 / 883 / 353
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
03.04.2014, 16:55 7
Лучший ответ Сообщение было отмечено daem0n как решение

Решение

Мечтать не вредно
Придётся вручную рассчитывать высоту, которую хотите задать пунктам, и задавать соответственно через свойство ItemHeight. Если же высота должна быть разной у пунктов, то всё посложнее будет, в этом случае используйте значение OwnerDrawVariable для свойства DrawMode, а также воспользуйтесь событием MeasureItem для расчёта размеров пунктов.
1
3 / 3 / 1
Регистрация: 25.01.2014
Сообщений: 38
03.04.2014, 17:04  [ТС] 8
для кого задавать ItemHeight?
0
985 / 883 / 353
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
03.04.2014, 17:08 9
Это свойство ListBox.
0
3 / 3 / 1
Регистрация: 25.01.2014
Сообщений: 38
03.04.2014, 18:19  [ТС] 10
можно в цикле где заполняется список это сделать?

Добавлено через 44 минуты
Все сделал.Работает отлично.
Добавил там где перерисовываю ячейки
C#
1
listBox_doc.ItemHeight = (int)Math.Ceiling(listBox2.Font.Size * 1.6);//перерисовываем размер ячеек
0
985 / 883 / 353
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
03.04.2014, 19:00 11
Это действие однократно делайте, когда меняется размер шрифта, в событии DrawItem оно чревато бесконечными перерисовками.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2014, 19:00

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как сохранить Items из ListBox в текстовый файл
Допустим. Мне нужно сохранить всё, что написано в ListBox'се в новом текстовом документе (.txt)....

Перенос Items из Listbox 1-ой формы в Listbox 2-ой. Сохранение изменений
Добрый день, изучаю C#, пользуюсь Visual Studio 2015, Windows Forms. Проблема такова: На первой...

Пустой Список Элементов Редактора Коллекции: Items при создании ContextMenu для ListBox
Всем готовым помочь неофиту мои приветствия. Пытаюсь быстро соорудить некую форму в Visual...

Как преобразовать items, которые есть в listbox, в одно сочетание без пробелов?
Всем доброго времени суток ! У меня вопрос. Как преобразовать items которые есть в listbox в 1...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.