Как вставить верхние закрепленные элементы управления под верхние закрепленные элементы управления на панели
Я использую panel.controls.add, чтобы добавить элементы управления на панель. Но... они вставляют в самый верх.
Я пробовал методы BringToFront и SendToBack, но, похоже, не работает.
Есть идеи? Спасибо
РЕДАКТИРОВАТЬ:
я хочу, чтобы они стояли в верхней части контейнера, но если там есть другой закрепленный элемент управления, новый отображается ниже этого...
5 ответов
Порядок стыковки основан на индексе элемента управления в коллекции Controls. Последний идет на вершине. Вот почему ваш добавленный элемент управления идет сверху и опускает существующий закрепленный элемент управления вниз. Используйте метод SetChildIndex(), чтобы переместить элемент управления в индекс 0:
var btn = new Button();
btn.Dock = DockStyle.Top;
panel1.Controls.Add(btn);
panel1.Controls.SetChildIndex(btn, 0);
У вас есть два способа сделать это.
Добавьте элементы управления в том порядке, в котором вы хотите, чтобы они отображались на панели, закрепите элементы управления снизу при их создании.
Example: Panel.Controls.Add(Label1) Panel.Controls.Add(Label2) Panel.Controls.Add(Label3)
В обратном порядке элементов управления, добавляемых на панель, закрепите элементы управления в верхней части по мере их создания.
Example Panel.Controls.Add(Label3) Panel.Controls.Add(Label2) Panel.Controls.Add(Label1)
Если это не то, что вам нужно, вы можете изменить порядок добавления (что маловероятно) или стыковки (вверх или вниз).
"я хочу, чтобы они стояли в верхней части контейнера, но если там есть другой закрепленный элемент управления, новый отображается ниже этого..."
Хорошо я понял. Я вижу два решения:
использование
Anchor
свойство (установлено вTop
) вместоDock
свойство - тогда эти элементы управления будут размещены в верхней части бок о бок, однако они не будут растягиваться горизонтально, они не будут автоматически занимать все доступное горизонтальное пространство (вы по-прежнему можете контролировать ихWidth
программно конечно). Если это ограничение является проблемой для вас, попробуйте вариант 2:Используйте другой контейнерный элемент управления - это может быть
TableLayoutPanel
- закрепите его в верхней части первой панели, а затем поместите остальные элементы управления в эту TableLayoutPanel. Используйте егоColumns
Коллекция, чтобы обеспечить место для нескольких элементов управления рядом друг с другом. (Встраивание элементов управления контейнером в другие элементы управления контейнером не является необычным и часто необходимо при разработке сложных макетов.)
Как изменить расположение макетов на форме во время разработки:
Откройте форму в режиме конструктора. Откройте окно "Структура документа" - "Просмотр" | "Другие окна" | "Структура документа" - (Ctrl+Alt+T).
Структура документа показывает панели макета в виде дерева в обратном порядке, в котором они отображаются в форме. В окне "Структура документа" вы можете изменить порядок расположения панелей. Из-за обратного порядка все, что показано вверху в схеме документа, будет внизу формы.
Используйте FlowLayoutPanel и добавьте все элементы управления на этой панели.
Чтобы добавить новейший элемент управления ниже к предыдущему элементу управления
flowLayoutPanel1.FlowDirection = FlowDirection.LeftToRight;
flowLayoutPanel1.AutoScroll = true;
Label label1 = new Label();
flowLayoutPanel1.Controls.Add(label1);
label1.SendToBack();