Прокрутка панели WinForm без полосы прокрутки?

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

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

Я возился со свойствами VerticalScrollbar, и ни один из них, похоже, ничего не делает. Я заметил, что если для AutoScroll установлено значение false, AutoScrollPosition фактически показывает координаты, за исключением отрицательных значений, которые должны быть. Также я заметил, что panel.VerticalScrollbar.Visible = true; кажется, работает только при размещении вне конструктора. Есть ли для этого причина?

В принципе, полосы прокрутки WinForms меня очень сбивают с толку (глючат?). Кто-нибудь знает хороший способ программной прокрутки панели вверх и вниз с помощью кнопок (мне все равно, нужна ли мне невидимая полоса прокрутки).

Спасибо! = D


person Alex    schedule 24.08.2009    source источник


Ответы (1)


Сделайте свой UserControl обычным UserControl (то есть наследовать от UserControl вместо Panel) и поместите Panel в свой UserControl. Поместите любой контент / элементы управления на внутреннюю панель, а затем измените свойства панели Left и Top, чтобы перемещать ее без полос прокрутки. Вы также можете добавить кнопки в свой UserControl для управления перемещением внутренней панели.

Однако более простым способом может быть просто использовать действительно широкие / высокие полосы прокрутки и установить для их Thumbwidth (я думаю, это свойство) такое же большое значение - это создаст полосы прокрутки, которые легко использовать пальцами. Насколько мне известно, нет способа сделать это с полосами прокрутки, которые появляются на панели с Autoscroll, установленным на True, поэтому вам все равно нужно использовать метод, который я упомянул выше (с внутренней панелью, расположенной на вашем UserControl), и добавить полосы прокрутки переместить его самостоятельно.

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

person MusiGenesis    schedule 25.08.2009
comment
Привет, спасибо MusiGenesis за отличный ответ! Я как бы подумал, что перемещение панели будет самым простым способом сделать это. Однако я хотел избежать этого, поскольку размер панели будет зависеть от содержимого внутри нее, и теперь мне нужно проделать больше работы, чтобы выяснить размер панели и прочего. Тем не менее, похоже, я пойду именно по этому пути. Еще раз спасибо! - person Alex; 25.08.2009