Panel.Dock Fill, игнорируя другие настройки Panel.Dock

Если вы создадите панель в форме и установите для нее значение Dock = Top, а другую панель и установите для нее Dock = Fill, она может заполнить всю форму, игнорируя первую панель. Изменение порядка табуляции ничего не дает.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
158
0
96 604
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Щелкните правой кнопкой мыши панель с Dock = Fill и выберите «На передний план».

Это делает этот элемент управления последним, что учитывает настройки Dock для других элементов управления в том же контейнере.

Просто, Боже, это меня действительно раздражало.

smirkingman 15.10.2010 17:14

Обретает смысл, если подумать.

Gary Kindel 26.02.2016 18:19

Другой, потенциально более чистый вариант - использовать элемент управления TableLayout. Установите один ряд желаемой высоты для верхней док-станции и другой ряд, чтобы заполнить на 100% нижнюю часть. Установите обе панели внутри на Заливку, и все готово.

(Однако к TableLayout нужно привыкнуть.)

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

Nick 30.09.2008 23:40

Уменьшает ли эта производительность то, что средний пользователь увидел бы в простом случае двух панелей, как описано выше? Или это то, что они замечают, когда у вас есть десятки объединенных коммуникаций, все с макетами, все в одном макете? (По иронии судьбы, приложение, над которым я сейчас работаю, похоже на это, и производительность кажется нормальной ...)

John Rudy 02.10.2008 15:20

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

Tim 02.03.2011 18:47

Вот трюк, который у меня сработал ...

Поместите верхний элемент и закрепите его сверху.

Поместите сплиттер, а также закрепите его сверху, затем отключите его (если вы не хотите изменить размер верха).

Затем поместите объект «Заливка» и установите для «Закрепление» значение «Заливка». Объект останется ниже разделителя.

Ответ принят как подходящий

Макет закрепления зависит от приказ родственных элементов управления. Элементы управления закреплены «на кнопке вверх», поэтому последний элемент в коллекции закрепляется первым. Пристыкованный элемент управления учитывает только расположение пристыкованных братьев и сестер ранее. Следовательно, элемент управления с Dock = Fill должен быть первым (вверху) в соседнем порядке, если вы хотите, чтобы он учитывал другие закрепленные элементы управления. Если это не первый элемент управления, предыдущие элементы управления будут перекрывать его.

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

Окно Схема документа (Вид -> Другие окна -> Структура документа) дает полезное древовидное представление иерархии и порядка элементов управления, а также позволяет изменять порядок элементов элементов управления.

Вы также можете изменить порядок братьев и сестер прямо в дизайнере с помощью контекстного меню -> На передний план / На задний план, которое перемещает элемент управления в положение первого или последнего из братьев и сестер. Эти метки меню могут несколько сбивать с толку, поскольку фактический эффект зависит от модели макета.

При фиксированном позиционировании элементов управления 2D-положение не зависит от порядка соседних элементов, но при наложении элементов управления самый ранний элемент управления в порядке будет «наверху», скрывая часть элементов-элементов позже в порядке. В этом контексте имеет смысл Перенести на передний план / Отправить на задний план.

Внутри панелей потокового или табличного макета порядок создания определяет визуальный порядок элементов управления. Нет дублирующих элементов управления. Таким образом, переместить на передний план / отправить назад на самом деле означает сделать первым или последним в порядке элементов управления.

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

У меня есть панель, полоса состояния и полоса меню в форме, и кажется, что когда я закрепляю полоску меню вверху, полоску статуса внизу и заполняю панель, панель не заполняет пространство между две полосы, если это не первый брат (вверху окна структуры документа над двумя полосами). Перемещение панели вниз (в сторону «последней») закрывает полосы. Итак, должен ли элемент управления Dock = Fill быть первым в этом порядке? Я неправильно это читаю? я использую 3.5 (2008). Это изменилось?

jrsconfitto 14.07.2010 17:41

tl; dr; Щелкните правой кнопкой мыши панель с Dock = Fill и выберите «На передний план».

kristianp 15.07.2011 04:50

У меня есть 3 групповых ящика внутри панели, и, как и @Jugglingnutcase, я должен был их упорядочить, например: Dock.Fill, затем Dock.Bottom и, наконец, Dock.Top, чтобы они 3 правильно пристыковались. В любом случае классный пост!

johnildergleidisson 20.07.2012 17:34

+1 для окна структуры документа. Никогда не знал, что это существует, но это так полезно.

gligoran 01.09.2012 13:39

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

Camilo Martin 07.02.2013 05:16

@Camilo: если вы добавляете элементы управления динамически, вы должны добавлять их в желаемом порядке.

JacquesB 20.02.2013 15:58

@JacquesB Значит, кроме добавления их в том порядке, в котором я хочу, нет никакого способа изменить их порядок позже, верно? Не считая удаления их всех и повторного добавления их заново.

Camilo Martin 20.02.2013 22:41

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

JacquesB 21.02.2013 13:01

Согласитесь с @gligoran - понятия не имел, что такое существует, это круто!

BrainSlugs83 18.06.2013 12:50

@JacquesB: Я могу подтвердить наряду с другими комментариями и ответами, что решение состоит в том, чтобы поместить элемент управления Dock = Fill первый в родственный порядок в структуре документа, а не последним, как описано в ответе. Хотели бы вы отредактировать ответ, чтобы исправить это? Или я был бы рад внести правку, но я не хочу быть самонадеянным. Спасибо!

Michael Geary 24.09.2016 00:40

Спасибо, это действительно полезно.

DavidWainwright 15.06.2017 11:27

+1: Я не могу поверить, сколько времени я потерял, пытаясь понять это! Почему, черт возьми, это не документировано лучше?

RBarryYoung 05.11.2019 23:17

У JacquesB была идея с планом документа, но иерархия не решила мою проблему. Мои элементы управления не были в иерархическом стиле, они просто были перечислены с одним и тем же родителем.

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

Элементы управления в нижней части списка будут перекрывать элементы управления в верхней части окна «Структура документа». В вашем случае вы должны убедиться, что первая панель находится под второй панелью и так далее.

У меня была такая же проблема, и мне удалось ее решить. Если у вас есть контейнер с DockStyle.Fill, у других также должен быть DockStyle, но Top или что угодно. Важно сначала добавить элемент управления с DockStyle.Fill в Controls, а затем остальные.

Пример:

ComboBox cb = new ComboBox();
cb.Dock =  DockStyle.Top;

GridView gv = new GridView();
gv.Dock =  DockStyle.Fill;

Controls.Add(gv); // this is okay
Controls.Add(cb);

но если сначала поставить cb

Controls.Add(cb);
Controls.Add(gv); // gv will overlap the combo box.

Если вы не хотите изменять порядок элементов внутри кода, вы можете использовать метод Container.Controls.SetChildIndex () с Container, например, Форма, панель и т. д., В которые вы хотите добавить свои элементы управления.

Пример:

     //Container ------------------------------------
     Panel Container = new Panel();

     //Top-Docked Element ---------------------------
     ButtonArea = new FlowLayoutPanel();
     Container.Controls.Add(ButtonArea);
     Container.Controls.SetChildIndex(ButtonArea, 1);
     ButtonArea.Dock = DockStyle.Top;

     //Fill-Docked Element --------------------------
     box = new RichTextBox();
     Container.Controls.Add(box);
     Container.Controls.SetChildIndex(box, 0); //setting this to 0 does the trick
     box.Dock = DockStyle.Fill;

Я столкнулся с той же проблемой. Моя была с добавлением новых / настраиваемых элементов управления под полосой меню во время выполнения. Проблема заключалась в том, что элементы управления пристыкованы, решено закрепить сверху формы и полностью игнорировать полосу меню, что очень раздражает, если вы спросите меня. Поскольку это нужно было делать динамически с кодом, а не в режиме разработки, это сильно расстраивало. Самый простой способ, который я нашел, - создать панель в режиме дизайна и закрепить ее под полосой меню. Оттуда вы можете просто добавить / удалить элементы управления на панель, и вы можете закрепить ее во время выполнения. Не нужно возиться со всеми вашими элементами управления в вашей форме, которые на самом деле не нужно менять, слишком много работы в зависимости от того, что вам действительно нужно делать.

object.dock = Fill
Panel.Controls.Add(object)

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

parentForm.Controls.SetChildIndex (myPanel, 0) 

В моем случае я сделал это, чтобы переместить панель Dock / Fill в качестве первого элемента управления в моей форме, чтобы она не перекрывалась с другим закрепленным элементом управления, установленным на Dock / Top (полоса меню).

Также может быть быстрым решением взять компонент «Заливка» и щелкнуть правой кнопкой мыши, вырезать и вставить в нужную область.

Другие вопросы по теме