2012-05-09 4 views
10

У меня есть "FlowLayoutPanel" и хотите добавить серию "UserControl" к нему:Добавить Control Value перед другим значением управления в C#

mainPanel.Controls.Add (Fx);

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

ответ

18

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

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

TanX Man его решил мою проблему :) – Am1rr3zA

1

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

flowLayoutPanel1.FlowDirection = FlowDirection.BottomUp; 

или вы могли бы

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

Если изменить направление потока моей проблемы не решает, это просто добавить справа налево, а не слева направо, но все еще добавить после старого UserControl – Am1rr3zA

+0

Но если она добавляет слева направо делает это не компоновка, как самый старый элемент управления, чтобы левый новейший элемент управления оставил слева? –

+0

Извините, у меня был второй вариант назад ... У меня был SendToBack должен был быть BringToFront –

0

исправляющие себя: myPanel.Controls.AddAt(index, myControl)

+0

Нет, такого метода нет, у нас просто есть Add(). – Am1rr3zA

+0

Nevermind, я думал о ASP.NET WebForms. Я думаю, вы имеете дело с WPF, верно? Если да, пожалуйста, попробуйте. –

+0

Я работаю с окном, а не WPF – Am1rr3zA

0

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

    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(); 
Смежные вопросы