Как исправить список Excel, который не может прокрутить последний элемент в поле зрения - PullRequest
13 голосов
/ 02 мая 2011

Ужасная проблема, с которой я столкнулся в интерфейсах Excel с тех пор, как я себя помню, связана с прокруткой списка.

Когда в списке появляется больше элементов, которые можно отобразить, появится полоса прокрутки.,Однако в определенных условиях, прокручивая полосу до конца списка и выпуская ее, вы «подпрыгнете» полоску на ступеньку вверх, и вы не сможете увидеть последний элемент в списке.Это проиллюстрировано здесь: Can't scroll all the way down

Существует много сообщений на форуме, посвященных этой проблеме, и решением всегда было «Установите для свойства интегральной высоты значение false, а затем снова установите для него значение true».Это немного изменяет размер списка так, чтобы его высота была округлена до высоты одного ряда, а затем ни один элемент не остался скрытым.

With lstbox
    .IntegralHeight = False
    .Height = myHeight
    .IntegralHeight = True
End With

Однако в некоторых случаях это происходитне работа.Если вы:

  1. Программная установка высоты вашего списка
  2. НЕ с использованием простого выбора списка (fmMultiSelectSingle)

Тогдапросто установив целую высоту на false и затем на true после или между изменениями высоты, будет произведена корректировка высоты вашего списка, но когда вы перейдете к прокрутке вниз, проблема останется - последний элемент не будет виден.

Ключ к этому расстраивающему вопросу заключается в том, что, хотя все остальные в Интернете подтверждают, что решение «IntegraHeight» работает для них, эти особые случаи разочарованы вопросом, почему оно не работает для них.Так, как они получают свое исправление?

Ответы [ 9 ]

11 голосов
/ 02 мая 2011

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

Когда метод .IntegralHeight, показанный вышене работает, так или иначе работает следующий метод:

With lstbox
    .IntegralHeight = False
    .Height = myHeight
    .IntegralHeight = True
    .MultiSelect = fmMultiSelectSingle
    .MultiSelect = fmMultiSelectExtended
End With

Просто изменив свойство .MultiSelect на fmMultiSelectSingle, а затем вернув его обратно к желаемому стилю выбора, высота списка будет автоматически измененасвойство .IntegralHeight немного отличается по высоте от того, когда эти действия не выполняются - разница приводит к правильной работе полосы прокрутки:

Workaround worked

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

2 голосов
/ 02 октября 2013

With lstbox

`.Height = myHeight`
`.MultiSelect = fmMultiSelectExtended`
`.MultiSelect = fmMultiSelectSingle`

End With

Это сработало для меня. Нет необходимости устанавливать свойство Integral height

2 голосов
/ 25 ноября 2012

Мне пришлось привязать позицию, так как мой ListBox шел по странице:

With ListBox1 
 .IntegralHeight = False
 .IntegralHeight = True
 .Height = 45
 .Width = 69
 .Top = 0
 .Left = 1255.5
End With
1 голос
/ 22 февраля 2012

В моем случае решение было таким методом:

with listbox
   .IntegralHeight = False
   .Height = myHeight
   .Width = myWidth
   .IntegralHeight = True
   .Height = myHeight
   .Width = myWidth
end with

Наслаждайтесь.

0 голосов
/ 21 февраля 2018

я знаю, что это очень старый пост. но я многое сделал, чтобы решить эту проблему, поэтому я просто хочу поделиться своим советом. :)

прежде всего, Метод интегральной высоты не работает, если уровень масштабирования листа не равен 100%.

это изменит высоту и ширину списка, местоположение и т. Д. (Даже если вы установите свойство объекта «не перемещать или не изменять размер с ячейкой»)

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

Мой совет прост. есть комбинация между размером шрифта и высотой списка.

если ваш размер шрифта составляет 6-10 (ариальный, обычный), высота списка увеличивается в несколько раз 12,75 (кстати, мой стиль списка равен 1: ListStyle, 1-fmListStyleOption. Он может отличаться от стиля 0)

До тех пор, пока высота одинакова с этими коэффициентами 12,75, проблем не будет.

в случае размера шрифта 12 (ариальный, обычный), он кратен 13,55

так что, если в вашем проекте нет ограничений на размер списка, просто немного измените его размер в зависимости от размера шрифта, чтобы получить больше комфорта. :)

0 голосов
/ 22 декабря 2015

Спасибо, Алена. Ваше исправление хорошо сработало для меня.

Я обнаружил последующую проблему, связанную с высотой ListBox при изменении его размера, что он изменяется непредсказуемым образом в зависимости от начальной высоты. Высота измененного размера снова была другой, когда отображалась на другом компьютере с 125% масштабированием текста. Например, если я установил высоту между 358 и 370, высота измененного размера будет либо 370,65, либо 371,4 на моем компьютере, но на компьютере с 125% масштабированием текста это будет 360,1, 370,25 или 380,45. В результате такой большой изменчивости ListBox мог скрыть другие элементы управления под ним.

Исправление должно было начинаться с максимальной высоты, которую я хотел, и уменьшать начальную высоту, пока высота с измененным размером не стала меньше максимальной высоты, которую я хотел. Я делаю это всякий раз, когда отображаю этот ListBox.

    Hmax = 372      'Target Height 
    H1 = Hmax
    With SteelForm.Controls.Item("ListBox1")
        Do
            H1 = H1 - 1
            .IntegralHeight = False
            .Height = H1
            .IntegralHeight = True
            .MultiSelect = fmMultiSelectSingle
            .MultiSelect = fmMultiSelectExtended
            DoEvents
        Loop Until .Height < Hmax
    End With
0 голосов
/ 10 июля 2015

нашел смехотворно простой способ решить эту проблему. немного отрегулируйте свою высоту вверх или вниз, чтобы нижняя строка списка находилась между флажками, тогда вы можете прокрутить вниз до последнего элемента, даже если для IntegralHeight установлено значение false

0 голосов
/ 15 февраля 2012

Просто установите для свойства Integral Height значение True

0 голосов
/ 02 мая 2011

То, что я видел в прошлом на форумах, это просто добавление дополнительной пустой строки в ваш список. Это должно сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...