В моем коде есть место, где я динамически добавляю элементы управления к расположенной сверху вниз FlowLayoutPanel. Мне нужно, чтобы элементы управления отображались в определенном порядке, поэтому каждый раз, когда я делаю очистку коллекции FlowLayoutPanel.Controls, добавляю каждый дочерний элемент управления в том порядке, в котором я хочу, чтобы они отображались. Мой код делает это:
private void arrangement1()
{
flowLayoutPanel1.Controls.Clear();
flowLayoutPanel1.Controls.Add(control1);
flowLayoutPanel1.Controls.Add(control2);
flowLayoutPanel1.Controls.Add(control3);
}
Большую часть времени это прекрасно работает. Однако есть один конкретный элемент управления, который не сохраняет свою позицию в коллекции элементов управления при добавлении других элементов управления после него. Например, в следующем сегменте кода:
private void arrangement2()
{
flowLayoutPanel1.Controls.Clear();
flowLayoutPanel1.Controls.Add(control1);
flowLayoutPanel1.Controls.Add(movingControl);
//movingControl current is at index = 1 in Controls.
flowLayoutPanel1.Controls.Add(control2);
//control2 is now at index = 1, movingControl got bumped to index = 2 in Controls.
flowLayoutPanel1.Controls.Add(control3);
//control3 is now at index =2, movingControl got bumped to index = 3 in Controls.
}
Это происходит только в первый раз, когда movingControl добавляется в Controls. Если я вернусь и позвоню договоренности1, а затем договоренности2 во второй раз. Элементы управления появятся в намеченном порядке:
- control1
- movingControl
- Control2
- Control3
Кажется, это ошибка в коде для Controls.Add. Либо это, либо документация по поведению .Add является неполной, поскольку она не всегда добавляет к концу коллекции. Кто-нибудь знает, почему это происходит? Очевидное «исправление» - просто позвонить:
arrangement2();
arrangement1();
arrangement2();
Однако это кажется очень плохим решением какой-то другой основной проблемы.
Заранее спасибо за помощь!
РЕДАКТИРОВАТЬ: обратите внимание, что каждый из этих элементов управления является членом пользовательского класса представления, поэтому они сохраняются после очистки коллекции элементов управления. Однако эти элементы управления не хранятся в какой-либо упорядоченной коллекции. Они просто члены этого пользовательского класса. Показанный выше код работает правильно, как показано. Тем не менее, в контексте моей программы с графическим интерфейсом описывается ошибочное поведение. Я бы опубликовал больше кода, если бы у меня была идея, что было бы полезно, но есть много кода, который касается этих частей. Это весь код, который выполняется для описанного действия.
Что я действительно ищу, так это возможные сценарии, вызывающие Controls.Add, чтобы вставить элемент управления не в последний индекс коллекции. В частности, после вызова Clear () и без вызовов Remove ().