Добавить контрольное значение перед другим значением управления в С#

У меня есть "FlowLayoutPanel" и хочу добавить к нему ряд "UserControl":

mainPanel.Controls.Add(Fx);

Каждый новый usercontrol, добавленный после старого, я хочу добавить новый пользовательский контроль перед предыдущим пользовательским контролем, который был добавлен, как я мог это сделать? Я не нашел таких функций, как mainPanel.Controls.AddAt(...) или mainPanel.Controls.Add(index i, Control c) или mainPanel.Controls.sort(...) или....

Ответ 1

Вы можете использовать метод SetChildIndex. Что-то вроде (возможно, вам нужно возиться с indecies):

var prevIndex = mainPanel.Controls.IndexOf(previouslyAdded)
mainPanel.Controls.Add(fx);
mainPanel.Controls.SetChildIndex(fx, prevIndex); 

Ответ 2

по звукам этого вы хотите изменить атрибут flowdirection, чтобы новые элементы управления были добавлены в верхний

flowLayoutPanel1.FlowDirection = FlowDirection.BottomUp;

или вы можете

 Label label1 = new Label();
 flowLayoutPanel1.Controls.Add(label1);
 label1.BringToFront();

Ответ 3

Исправление: myPanel.Controls.AddAt(index, myControl)

Ответ 4

Что-то вроде этого добавит элемент управления в алфавитном порядке.

                    FlowLayoutPanel flowLayoutPanel = ...; // this is the flow panel
                    Control control = ...; // this is the control you want to add in alpha order.

                    flowLayoutPanel.SuspendLayout();
                    flowLayoutPanel.Controls.Add(control);

                    // sort it alphabetically
                    for (int i = 0; i < flowLayoutPanel.Controls.Count; i++)
                    {
                        var otherControl = flowLayoutPanel.Controls[i];
                        if (otherControl != null && string.Compare(otherControl.Name, control.Name) > 0)
                        {
                            flowLayoutPanel.Controls.SetChildIndex(control, i);
                            break;
                        }
                    }

                    flowLayoutPanel.ResumeLayout();