Как объединить две коллекции элементов управления для использования с оператором foreach
Что касается вопроса, у меня есть две панели в моей форме, одна называется leftPanel, а другая - rightPanel. Они контролируют макет из двух столбцов в моей форме.
У меня также есть сворачивающиеся / расширяющиеся групповые блоки внутри этих панелей, и я хочу перебрать каждую из них, чтобы обновить макет, заставляя их щелкать друг под другом при изменении размера.
Вот код, который у меня есть:
private void RefreshLayout()
{
int rollingTopLeft = grpiAddressDetails.Top + grpiAddressDetails.Height + 10;
int rollingTopRight = grpiBranding.Top + grpiBranding.Height + 10;
foreach(Control temp in leftPanel.Controls && rightPanel.Controls)
{
if (temp is GroupBox)
{
if (!(temp.Name.Contains("grpi"))) // Top group boxes have 'i' as the 4th character in their name.
{
if (temp.Parent == leftPanel)
{
temp.Top = rollingTopLeft;
rollingTopLeft += temp.Height + 10;
}
else if(temp.Parent == rightPanel)
{
temp.Top = rollingTopRight;
rollingTopRight += temp.Height + 10;
}
}
}
}
}
Это линия, где мне нужно присоединиться к коллекциям:
foreach(Control temp in leftPanel.Controls && rightPanel.Controls)
Я понимаю, что && не работает, также пробовал Controls.Concat, но коллекции управления, похоже, не имеют этой функции. Надеюсь, все ясно!
1 ответ
Решение
var allControls = leftPanel.Controls.Cast<Control>().Concat(rightPanel.Controls.Cast<Control>());
foreach(Control temp in allControls)
{
//...
}