Когда LayoutEngine вызывается в winforms? - PullRequest
0 голосов
/ 01 марта 2012

Вчера я обнаружил, что когда вам нужно создать элементы управления во время выполнения, вы можете использовать LauyoutEngine, чтобы разместить элементы управления в нужном месте.Я всегда использовал TableLayoutPanel для этого, но я должен сказать, что LayoutEngine работает лучше, и теперь у меня больше контроля.

Но мне было интересно, как это работает под капотом?Когда вызывается свойство LayoutEngine?И когда лучше всего использовать механизм компоновки?

1 Ответ

2 голосов
/ 23 марта 2012

Свойство LayoutEngine доступно / создано (и кэшировано!) В (базовом) конструкторе элемента управления. Поэтому, если вы хотите использовать его, вам нужно создать подкласс Control или Panel и переопределить LayoutEngine.

Старайтесь избегать этого. Ваш компонент пользовательского интерфейса:

  • это довольно просто? Не используйте его, вы будете стрелять себе в ногу.
  • становится все сложнее? Попытайтесь решить эту проблему, составив несколько панелей, они довольно далеко у вас уйдут.
  • может быть использован где-то еще? Старайтесь не использовать его, вы не получите правильные варианты использования макета (Padding / Margin / DockStyle / DockPadding / Anchors / AutoSize / AutoScroll / ...), и это будет беспорядок.

Может быть, если ваш компонент пользовательского интерфейса

  • состоит из более внутренних элементов управления
  • вы пытаетесь сделать что-то необычное и нуждаетесь в большем контроле
  • ни один из внутренних элементов управления не должен быть невидимым / расширенным
  • вы готовы потратить больше времени, чем на выяснение того, почему ваша TableLayoutPanel / FlowLayoutPanel / ... не размещается так, как вы хотите

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

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