Як контролювати порядок стикування в WinForms


80

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

Я грав з дизайнером вікон, і здається, я не можу зрозуміти, що RightClick->Order->SendToFrontробить, бо саме це я хочу. Наскільки я можу це зробити, коли я додаю свій вміст до свого контролю, найновіший вміст завжди знаходиться вгорі, і я хотів би, щоб новіший вміст знаходився внизу, а найдавніший вміст знаходився в зверху.

Короткий зміст: Чи є простий спосіб у WinForms (C #) контролювати порядок, в якому речі стикуються з боків елементів керування?

Редагувати: я повинен робити це з коду, що додається, коли я додаю свої елементи керування, я не можу використовувати будь-які функції дизайнера WinForm, але те, що я намагаюся зробити, це імітувати дизайнер WinFormsSendToBackтаSendToFrontфункції


Дякую; Мені потрібно було програмно контролювати стикування, і я навіть не здогадувався, що їх замовлення контролює спосіб їх стикування.
Орлине око

Відповіді:


79

Використовуйте такі методи:

myControl.SendToBack();
myControl.BringToFront();

2
Я шукав control.SendToFront()Дивись, тепер це було легко. Дякую!
cesay

10
@Tommy: Ти, як правило, програмуєш ззаду комп’ютера? :)
Ешлі Тейт

6
На вікні з дизайну клацніть правою кнопкою миші. виберіть sendToBack і ще раз клацніть правою кнопкою миші: BringToFont
Сірий Вовк

Цей метод також застосовується для додавання елементів керування стикуванням у конструкторі форм. За допомогою контекстного меню ви можете відправити назад, потім перенести спереду, потім док-станцію, і це буде останнім елементом управління в ланцюзі стикування.
Андерс Лінден,

142

Перейдіть до Перегляд → Інші вікна → Контур документа.

У цьому вікні перетягніть елементи керування, щоб стикування було таким, як вам подобається.


Мені було цікаво, якими словами я міг би описати саме це вікно, щоб з часом потрапити туди в Google, дякую!
Купс

12
Я думаю, що це має бути відповіддю
Xinchao

1
Це не працює, якщо елементи керування додаються динамічно.
Wayne

Вирішити мою проблему легко під час проектування.
Хао Нгуєн

1
8 років потому ... найкраща відповідь
soulshined

12

Як ви вже сказали, найновіший елемент керування, доданий до колекції елементів керування, - це той, що знаходиться зверху. Якщо вам потрібно додати новіший елемент керування внизу, я запропоную створити список елементів керування, додати елементи керування до списку, змінити список і додати список до колекції елементів керування.

List<Control> controls = new List<Control();
controls.Add(new myFirstControl());
controls.Add(new mySecondControl());
controls.Reverse();
this.Controls.AddRange(controls.ToArray());

6

Елемент управління має два методи досягнення того, що ви шукаєте: BringToFrontі SendToBack.


4

Порядок додавання елементів керування до колекції елементів керування визначає порядок стикування.


Мені потрібно відредагувати порядок стикування після того, як елементи керування будуть додані до колекції
cesay

2
Тоді перейдіть до ControlCollection.SetChildIndex(control, index)методу.
Олівер Ханаппі,

@Oliver Hanappi: Чи можна це зробити в дизайнері? Без коду?
user2366975

Ви повинні мати змогу змінити порядок елементів керування у вікні "Контур документа" ( blogs.msdn.com/b/zainnab/archive/2010/11/30/… )
Олівер Ханаппі,

3

(Для того, щоб показати інший варіант): У Visual Studio 2012 (і пізніших версіях):

  1. Виберіть елемент керування, який потрібно перенести вперед (або назад);
  2. Клацніть на позначених нижче кнопках (Перенести спереду / Надіслати назад); введіть тут опис зображення

Це дасть вам можливість переставити елементи керування у бажаний порядок.


2

Зверніть увагу, що, роблячи це програмно, це може бути дуже простий спосіб, а саме:

containerPanel.Controls.SetChildIndex(Element, 0); //sends element to the bottom of the list

-3

Використовуйте FlowLayoutPanel, він робить саме те, що ви хочете.


1
Цей допис не відповідає на запитання, і цьому питанню вже виповнилося 6 років із відповідними відповідями.
cesay
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.