Мне нужен совет по изменению фона панели

В настоящее время у меня есть динамическое количество меньших панелей, добавляемых к большой панели. У меня есть отдельная форма, которая возвращает список рабочих идентификаторов.

Каждый 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 и создание объединения будет возможным решением, которое я собираюсь рассмотреть.

0 ответов

Другие вопросы по тегам