powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подскажите по многострочному listbox
7 сообщений из 7, страница 1 из 1
Подскажите по многострочному listbox
    #40026508
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел такой код:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
        private void lst_MeasureItem(object sender, MeasureItemEventArgs e)
        {
            e.ItemHeight = (int)e.Graphics.MeasureString(listBox1.Items[e.Index].ToString(), listBox1.Font, listBox1.Width).Height;
        }

        private void lst_DrawItem(object sender, DrawItemEventArgs e)
        {
            if (listBox1.Items.Count > 0)
            {
                e.DrawBackground();
                e.DrawFocusRectangle();
                e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
            }
        }



И он даже работает, но вот lst_MeasureItem отрабатывает только один раз, при старте программы. У меня же размер listbox меняется сплиттером, а высота не пересчитывается, количество строк на item остается тоже. Как это дело допилить чтоб реагировало на изменение размеров listbox?
...
Рейтинг: 0 / 0
Подскажите по многострочному listbox
    #40026746
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начинающих юзеров объясните человеческим езыгом, в чем состоит задача? С чем боретесь?
...
Рейтинг: 0 / 0
Подскажите по многострочному listbox
    #40026845
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

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

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

Вот и думаю как быть... может нужно всего лишь еще какой нить параметр поменять... Или может подписаться на событие ресайза и в цикле перебирать, пересчитывать высоту. Но тут загвоздка: событие ресайза не предлагает параметра MeasureItemEventArgs , а сами item-ы имеют тип object и я не знаю как докопаться до Graphics.MeasureString чтоб собственно пересчитать высоту... и до ItemHeight чтоб ее записать...
...
Рейтинг: 0 / 0
Подскажите по многострочному listbox
    #40026892
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам не кажется, что, может, как говорил классик - в консерватории что-то изменить?
"В листбоксе у меня длинный текст. соответственно он не умещается и обрезается - нужно сделать перенос на несколько строк."

Зачем эти финты? скрол же есть, да и х.с.н, а?
...
Рейтинг: 0 / 0
Подскажите по многострочному listbox
    #40026913
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

) не, не прокатит - этот текст по сути что-то вроде иконки, кнопки, кликнув на него в остальные части программы подгружаются данные относящиеся к этому тексту, то есть он должен быть целиком виден сразу, чтоб не перепутать, ибо тексты похожи.

Если простого решения не найдется попробую этот листбокс динамически пересоздавать при изменении размера...
...
Рейтинг: 0 / 0
Подскажите по многострочному listbox
    #40026967
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElementHost + UserControl на WPF. В wpf'ных ListBox/ListView такое делается вообще без проблем.
Вот здесь обсуждалось: https://www.sql.ru/forum/1145702/spisok-kak-v-autluke
задача была даже несколько более сложной.
...
Рейтинг: 0 / 0
Подскажите по многострочному listbox
    #40026992
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsql
Ролг Хупин,

) не, не прокатит - этот текст по сути что-то вроде иконки, кнопки, кликнув на него в остальные части программы подгружаются данные относящиеся к этому тексту, то есть он должен быть целиком виден сразу, чтоб не перепутать, ибо тексты похожи.

Если простого решения не найдется попробую этот листбокс динамически пересоздавать при изменении размера...


Возьмите старый добрый контрол и насилуйте его, по-моему он умеет туеву хучу всего

http://objectlistview.sourceforge.net/cs/index.html
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подскажите по многострочному listbox
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]