Мне нужен совет по изменению фона панели
В настоящее время у меня есть динамическое количество меньших панелей, добавляемых к большой панели. У меня есть отдельная форма, которая возвращает список рабочих идентификаторов.
Каждый WorkSpaceControl имеет глобальную переменную get, set, которая хранит идентификатор рабочей области, и я не вижу способа получить к ним доступ в моей текущей области.
WorkSpaceControl wsp = wch.GenerateWorkspaceControl(items, space.Id, space.Name, point);
workSpaceList.Add(wsp);
k++;
col++;
foreach (WorkSpaceControl p in workSpaceList)
{
/// allow something to be dragged onto the space and catches something
p.AllowDrop = true;
p.DragEnter += formDragEnter;
p.DragDrop += formDragDrop;
// Event handler for draggin picturebox
p.ItemIcon.MouseDown += new MouseEventHandler(moveIcon_MouseDown);
/// event handler for updating icons and quantity based on selected item
p.Child_ItemIndexChanged += c_SelectedIndexChanged;
PanelTest.Controls.Add(p);
}
private void btnFindByCustom_Click(object sender, EventArgs e)
{
ih_FindByCustom findCust = new ih_FindByCustom();
var result = findCust.ShowDialog();
if (result == DialogResult.OK)
{
List<int> workspaceidstohighlight = findCust.workspaceIdsToHighlight;
//highlihgt the panels in the workspaceidtohighlight
Panel p = (Panel)((Button)sender).Parent.Parent;
}
}
Мне нужен доступ ко всем рабочим областям управления, которые находятся на панели p.
Я решил это, но это довольно некрасиво
private void btnFindByCustom_Click(object sender, EventArgs e)
{
ih_FindByCustom findCust = new ih_FindByCustom();
var result = findCust.ShowDialog();
if(result == DialogResult.OK)
{
List<int> workspaceidstohighlight = findCust.workspaceIdsToHighlight;
//highlihgt the panels in the workspaceidtohighlight
if (workspaceidstohighlight.Count != 0)
{
foreach (WorkSpaceControl list in workSpaceList)
{
foreach (int idtohighlight in workspaceidstohighlight)
{
if (list.WorkspaceID == idtohighlight)
{
list.backPanel.BackColor = Color.Yellow;
}
}
}
}
}
}
Я не хочу делать workSpaceList глобальной переменной, но я не вижу другого пути.
У кого-нибудь есть "более чистый" способ сделать это? Я где-то видел, что использование linq и создание объединения будет возможным решением, которое я собираюсь рассмотреть.