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

Код: 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
11.12.2020, 11:38
    #40026746
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по многострочному listbox
Для начинающих юзеров объясните человеческим езыгом, в чем состоит задача? С чем боретесь?
...
Рейтинг: 0 / 0
11.12.2020, 14:50
    #40026845
iskatelsql
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по многострочному listbox
Ролг Хупин,

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

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

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

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

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

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

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

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


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

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


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