Какова цель метода Control.GetPreferredSize? - PullRequest
4 голосов
/ 27 июня 2011

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

Это описание GetPreferredSize вmsdn:

Control.GetPreferredSize(Size proposedSize)

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

Меня смущает следующее:

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

Что это значит?Что произойдет, если я верну размер, превышающий предложенный?

Может кто-нибудь объяснить мне, как это работает?

Ответы [ 2 ]

2 голосов
/ 27 июня 2011

Эта строка означает, что вы можете вернуть предпочтительный размер больше, чем параметр proposedSize, но значение proposedSize все равно должно влиять на ваш предпочтительный размер. Например, ваш возвращенный размер для GetPreferredSize(new Size(100, 0) должен быть меньше возвращенного размера для GetPreferredSize(new Size(200, 0)).

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

1 голос
/ 28 июня 2011

Контейнер Control.GetPreferredSize вызывается как часть цикла макета.

Позволяет вызываемому элементу управления вернуть размер, который они хотели бы иметь, если это возможно.Контейнер не должен соответствовать этому запрашиваемому размеру.Например, когда элемент управления имеет параметр Dock, равный Top, ширина будет определяться как ширина содержащего элемента управления независимо от значения, возвращаемого методом GetPreferredSize.Этот метод особенно полезен для контейнеров, таких как элемент управления макетом потока, который будет размещать каждый дочерний элемент управления один за другим.

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