Из моего опыта видно, что окна помещают все элементы управления, принадлежащие одному графическому контейнеру (панели, групповому блоку и т. Д.), В коллекцию программного обеспечения. Коллекция упорядочена по дочернему индексу, который является свойством каждого элемента управления в этом контейнере.
Хитрость в том, что дети с одинаковым индексом могут и существуют. В этом случае окна будут рисовать тех детей, упорядоченных по отношению к другим, но между ними это будет рисовать их в обратном порядке, они были добавлены в контейнер.
Короче говоря: для одного контейнера вы должны убедиться, что элементы управления имеют разные индексы, изменив ВСЕ, НЕ НЕКОТОРЫЕ из индексов, когда вы хотите изменить z-порядок. Например:
foreach (Control newControl in TopControl.Controls)
{
TopControl.Controls.SetChildIndex(newControl,indexlogic(newControl));
}
где indexLogic(newControl )
- ваш метод расчета индекса конкретного контроля.