Автопрокрутка не работает в дочернем пользовательском элементе управления

У меня есть UserControl Parent, который содержит элементы управления Child. Я хотел бы, чтобы мой элемент управления Parent выполнял автоматическую прокрутку, когда он слишком мал для своего Child. Чтобы получить Autoscroll, я установил для AutoScroll значение True в моем Parent и убедился, что Child достаточно большой, чтобы я мог изменить размер Parent, чтобы он был меньше его. Мой Parent содержится внутри Form и привязан ко всем четырем краям. Проблема в том, что я не могу заставить полосы прокрутки появляться во время выполнения.

Я не могу отобразить элемент управления без формы, конечно, если только он не находится в Designer. В Visual Studio 2008 Designer Parent отлично выполняет автопрокрутку: я могу изменить размер элемента управления, и всякий раз, когда его Child частично скрыт краем Parent, появляются полосы прокрутки. Однако при просмотре элемента управления в дизайнере Form или во время выполнения полосы прокрутки не отображаются, независимо от того, как я изменяю размер Parent.

Это похоже на ошибку, но больше похоже на то, что я упускаю что-то очевидное. Что-то в том, что он является потомком Form, кажется, препятствует автопрокрутке.


person Nathan    schedule 17.12.2010    source источник
comment
вам нужно отменить привязку (внизу и справа) дочернего элемента . только якорь сверху и слева, иначе полосы прокрутки не будут видны   -  person bh_earth0    schedule 29.10.2015


Ответы (3)


Попробуйте установить док=нет. Возникла проблема с стыковкой и полосами прокрутки. В моих собственных тестах с AutoScroll=true: если Dock=Fill, то нет полос прокрутки, если Dock=Top, то вертикальная полоса прокрутки, если Dock=Left, то горизонтальная полоса прокрутки, если Dock=None, то обе полосы прокрутки.

В конце концов я установил Dock=None для своих пользовательских элементов управления, и полосы прокрутки появились, как и ожидалось.

person mcdon    schedule 25.04.2011
comment
Но что, если вам все еще нужно поведение пристыковки? Чтобы Child заполнил отведенную для него область в Parent? - person Jeff B; 14.12.2011

Пробовали ли вы разместить панель внутри родительского элемента управления с пользовательским элементом управления внутри панели?

person Tom Faust    schedule 17.12.2010
comment
Спасибо за участие. Я только что добавил панель между элементами управления Parent и Child. Затем я установил для AutoScroll Parent значение false, а для панели — значение true. Автопрокрутка все еще работала, когда я проектировал Parent, но по-прежнему не работает при разработке Form или во время выполнения. - person Nathan; 17.12.2010
comment
Я создал простую примерную форму, которая содержит панель пристыковки=заполнения с AutoScroll=true. Внутри панели я разместил список с 15 элементами. Когда я изменяю размер формы, на панели отображается полоса прокрутки, если список слишком длинный для полного отображения. Код ниже. Если у вас не работает, возможно, у вас есть внутренний контроль? Он должен выйти за пределы панели. - person Tom Faust; 17.12.2010
comment
this.panel1.AutoScroll = true; this.panel1.Controls.Add(this.listBox1); this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; this.panel1.Location = новая система.Drawing.Point(0, 0); this.panel1.Name = панель1; this.panel1.Size = новый System.Drawing.Size(284, 265); this.panel1.TabIndex = 0; - person Tom Faust; 17.12.2010

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

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

person Varun Goel    schedule 18.01.2012