Страницы: 1 2 След.
RSS
Изменение количества строчек в Listbox, после изменения размеров формы и Listbox-а
 
я смотрел информацию по этому вопросу. Есть варианты как изменить размер формы мышкой, наверное с привязкой к форме можно изменить размер ListBox-а, а к чему привязаться чтобы можно было(автоматически) задать сколько строк в ListBox показывать при изменении размеров формы.

Может я не заметил обсуждений,подскажите
 
grig, не совсем понятен вопрос относящийся к названию темы. Ну и примера нет(хоть картинкой, главное понять как ВЫ это видите/хотите).
У листбокс строчки зависят от кол-ва занесенных данных, на то он листбокс, где присутствует скролл.
Или вы имеете ввиду- расширять размер формы+привязанный к ней листбокс в зависимости от кол-ва занесенных данных?
 
Я понял так: меняем размер формы - меняется ВЫСОТА ЛистБокса. И, соответственно, количество видимых строк в нём.
 
все правильно и главное - автоматически
 
Цитата
grig написал:
к чему привязаться чтобы можно было(автоматически) задать сколько строк в ListBox показывать при изменении размеров формы.
А привязываться не нужно: изменение размера ЛистБокса повлечёт за собой изменение количества видимых строк.
 
я имел в виду, чтобы процедура, которая отвечает за количество видимых строк - понимала, сколько строк надо вывести
Цитата
grig написал:
к чему привязаться чтобы можно было(автоматически) задать сколько строк в ListBox показывать при изменении размеров формы
 
Цитата
grig написал:
чтобы процедура, которая отвечает за количество видимых строк - понимала, сколько строк надо вывести
Не нужно никакой процедуры. Да и нет такой: сколько в окно ЛистБокса поместится строк, столько и будет.
 
процедура в listBox выдает 20 строк(из массива на 20 значений). Если в listBox и на форме видно 20 строк, а после уменьшения формы и бокса будет видно только 5(остальные по идее будут или в скролле или не видны). Хотелось бы чтобы процедура после уменьшения формы понимала, что будет видно только 5 строк и массив превращается в массив на 5 значений и их выдает, а после увеличения формы и бокса выдавала - 20(массив превращается в массив на 20 значений).

5 и 20 это неважно(мне кажется это удобно - 5 это минимум,а 20 максимум). Можно плавно можно скачком. Главное при уменьшении показывает меньше значений(но все), а при увеличении тоже все и чтобы не было пустого места в listbox-е(форму уменьшают чтобы удобнее было работать, большая мешает).

Я не упомянул про массив, поэтому наверно не очень было понятно
 
Цитата
и массив [из двадцати] превращается в массив на 5 значений и их выдает
Совершенно не понимаю, зачем такие извращения? Если список не помещается в поле, то появляется полоса прокрутки.
По Вашему варианту - как Вы увидите следующие 15 значений? Опять перезаписывать список?

Да и "гуляние" размеров ListBox... Со сколькими формами работал, но ни разу не возникала такая потребность. Иногда задействовалось изменение высоты формы, чтобы скрыть/показать чего-нибудь (например, блок информации/подсказок). Но менять поля и резать списки...
 
Цитата
[USER=7]vikttur[/USER] написал:
как Вы увидите следующие 15 значений? Опять перезаписывать список?
Вы исходите из того, что все 20 значений необходимы и они не так часто нужны, чтобы их выискивать с помощью полосы прокрутки. У меня другая ситуация. Желательно без полос прокрутки, а при желании увеличить количество строк в listbox-e

Я не список режу я изменяю размер массива. Информация в массиве может изменяться быстрее, тогда(если надо) я увеличиваю размер массива(размером ListBox) или информация приходит медленнее и мне 5 строк хватает
Изменено: grig - 28.12.2016 01:17:57
 
Скрытый текст
 
С.М.
Если исходить из вашего примера(я понял, что в нем при уменьшении формы появляется полоса прокрутки), то мне надо уменьшение количества букв в столбце "А".
Если форма большая, то видны все буквы, а если форму уменьшить в два раза, то будут показываться только половина букв(а остальных - нету), а если опять сделать форму большой, то показываются все буквы
(массив на 20 значений,как только 20-е значение заполнятся, то первое значение очищается и все значения смещаются к началу и двадцатое значение освобождается и в него записывается информация, потом опять первое значение очищается все смещается и так по кругу.)

Если я уменьшу форму, то у меня значения не пропадут т.к. значение массива уменьшится(было 20, а станет 10(5)), но все равно вся информация будет через массив проходить
 
Цитата
grig написал:
чтобы не было пустого места в listbox
grig, Вы никак не поймёте: у ЛистБокса нет свойства ListRows. У КомбоБокса есть, а у ЛистБокс нет. Количество отображаемых строк будет зависить от высоты ЛистБокса. Ну и от размера шрифта, разумеется.
 
значит будем переходить на КомбоБокс
 
В целом замысел не очень понятен, но можно подменять ЛистБокс его дубликатом (меньшей высоты), поместив его в ту же позицию: когда размер формы большой - дубликат скрыт, и отображается основной ЛистБокс. Если размер маленький - основной скрываем, отображаем дублёр и в него отбираем нужное количество строк из основного массива.
 
Цитата
будем переходить на КомбоБокс
?
Нажимать на кнопку выпадающего списка приятнее, чем видеть/не видеть какие-то строки?
 
там вроде есть режим - простой список, а кнопку можно убрать в свойствах
 
Цитата
grig написал: кнопку можно убрать в свойствах
Раскрывать КомбоБокс как будете? Программно?
Вот зачем Вы себе создаёте проблемы? ))
#15 читали? Не вариант?
 
Цитата
Юрий М написал: #15 читали? Не вариант?
тоже вариант,сделать несколько форм, отслеживать по высоте и выбирать нужную форму.

Я сейчас перешел на не модальную форму(своя специфика). Определюсь что важнее, а там видно будет
 
Цитата
grig написал: тоже вариант,сделать несколько форм
Я не говорил про несколько ФОРМ ))
 
несколько ЛистБокс  
 
Кому-то я уже подобное отправлял... Но эта фишка по сути своей костыль костылем, но работает... Но работает с внешним запуском (я использовал MouseMove), т. к. некое свойство ListBox.IntegralHeight, отвечающее за подгонку ТОЛЬКО ОДНОЙ строки (с округлением по высоте вниз до ближайшей целой), отрабатывает свою задачу ТОЛЬКО по выходу из процедуры. Сколько надо строк, столько запусков. Может, конечно и есть какие-нибудь задачи в которых такое требуется, но это больше на прикол смахивает...  ;)
Код
Sub Podgonka_dobavkoy_po_odnomu()
Static currentVisibleCount As Long 'помнит кол-во видимых строк
Dim maxScreenVisibleCount As Integer
maxScreenVisibleCount = 60 'чтоб за экран не вылезало задать самому на свое усмотрение
With Me.ListBox1
    If .Height < 6 Then currentVisibleCount = 0 'начальные условия
    If currentVisibleCount >= maxScreenVisibleCount Then Exit Sub
    If currentVisibleCount < .ListCount _
        Then currentVisibleCount = currentVisibleCount + 1 Else Exit Sub
    .IntegralHeight = False 'отключаем подгонку, чтоб при включении произошло событие
    .Height = .Height + 15 '15 зависит от размера шрифта, но держит широкий диапазон
    .IntegralHeight = True 'включаем, но подгонка произойдет после окончания процедуры
    Me.Height = .Height + 70
    Me.CommandButton1.Top = .Height + 10
    Me.CommandButton2.Top = .Height + 10
End With
End Sub

Private Sub ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Podgonka_dobavkoy_po_odnomu
End Sub

Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Podgonka_dobavkoy_po_odnomu
End Sub
 
Цитата
AAF написал: Сколько надо строк, столько запусков
не знаю, у вас в программе она отрабатывает на то количество строк, что задано и если исходить из того что размеры задавать должен массив - то большего и не надо. Но у меня размерность задаю я, поэтому ее надо переделать, но благодаря вам есть с чем работать. Большое спасибо
 
Цитата
maxScreenVisibleCount = 60 'чтоб за экран не вылезало задать самому на свое усмотрение
Задаете Вы. Кроме того можете ограничивать высоту, но при этом уже знать кол-во строк. И последнее... Если у Вас есть посторонний и постоянный источник событий, то и MouseMove Вам не нужен...  :)
 
Цитата
AAF написал: Задаете Вы
Я это понял, но неправильно написал. Если размер массива не меняется, то и ваша программа не нужна, а если меняется, то ваша программа очень удобна, но ее надо подстроить под свои нужды. Вашу программу мне удобно под себя подстроить, но только я сейчас нахожусь еще в поиске(установил себе multipage, чтобы на второй странице установить  настройки(привязывать или нет к активной ячейке и др), каких размеров формы мне нужны, какие настройки в них нужны. Когда я программу обкатаю тогда и приступлю к окончательной доводке. Еще раз спасибо за программу
Изменено: grig - 29.12.2016 12:34:40
 
Скрытый текст
 
Работает... А где можно получить значения констант? :qstn:
Цитата
Const A1 As Single = 2.99, B1 As Single = 9.76
 
AAF, я применил Ваш файл (спасибо !)  для расчёта зависимости высоты листбокса от числа его элементов.
 
Ну вот...  :cry: А я обрадовался, что можно высчитать как-то...
Я пробовал, но при различных фонтах поведение разное. при одних высота ListBox растет на точно фиксированное значение, а при других прирост каждой строки по размеру не одинаково Поэтому попытки вычислений не всегда приводят к точным константам, и при большом кол-ве строк эта погрешность набегает к последней строке и не всегда, к сожалению, положительная, а при отрицательной ListBox.IntegralHeight съедает последнюю строку.
 
Вариант со SpinButton. Размеры шрифта не мешают.
p.s. мне одному кажется странным такое кол-во просмотров темы?))
Страницы: 1 2 След.
Читают тему
Наверх