Как определить полный размер панели (включая полосы прокрутки) в С#

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

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

Итак, предположим, что какой-то контент был введен на панель, и с учетом расстояния прокрутки он действительно стал панелью размером 600x750 пикселей. Кто-нибудь знает, как я могу получить эту информацию?

Спасибо


person utterly_confused    schedule 29.07.2011    source источник
comment
Это приложение WPF?   -  person sll    schedule 29.07.2011
comment
Мой ответ был основан на предположении, что свойства для этого нет, а оказывается есть: PreferredSize.   -  person Igby Largeman    schedule 30.07.2011


Ответы (2)


Предложение «включая полосы прокрутки» делает вопрос без ответа. Поскольку полосы прокрутки применяются только к DisplayRectangle.

Вы можете получить требуемый размер панели, чтобы не было полос прокрутки, из свойства PreferredSize. Вы можете получить высоту и ширину полос прокрутки из свойств SystemInformation.HorizontalScrollBarHeight и VerticalScrollBarWidth.

person Hans Passant    schedule 29.07.2011
comment
+1 FWIW Я думаю, что включение полос прокрутки просто означает, что полосы прокрутки отображаются. - person David Heffernan; 30.07.2011
comment
Да, PreferredSize — это то, что хочет OP. @David: Я попробовал ваш метод - как ни странно, на -1 пиксель по каждой оси. - person Igby Largeman; 30.07.2011
comment
@Charles PreferredSize отличался на 4 от моего метода, когда я пытался. Иди разберись! Но PreferredSize кажется им. Однако необходимо проверить, отображаются ли полосы прокрутки. - person David Heffernan; 30.07.2011
comment
@David: проверьте заполнение панели и поля всего, что вы в нее вставляете. И то, и другое повлияет на результаты. - person Igby Largeman; 30.07.2011
comment
@David - Да, свойство Margin, которое по умолчанию равно 3. И вам нужно добавить значение свойства SmallChange полосы прокрутки, которое по умолчанию равно 1. Сколько я себя помню, полосы прокрутки были массивной питой. - person Hans Passant; 30.07.2011

Когда содержимое Panel больше, чем его ClientSize, тогда AutoScrollMinSize должен быть эквивалентен прокручиваемой области Panel.

person mbeckish    schedule 29.07.2011
comment
AutoScrollMinSize сообщает (0,0) в моих тестах, но мой ответ работает!! ;-) - person David Heffernan; 29.07.2011
comment
Хм, я знаю, что работает и обратная ситуация: присваивание размера AutoScrollMinSize изменяет прокручиваемую область элемента управления на этот размер (при условии, что размер больше, чем ClientSize элемента управления). - person mbeckish; 30.07.2011