Как Вы реализуете на WinForms C# плавающие панели?

Делаю простую студенческую работу и возникла необходимость реализовать плавающие панели, наряду с основным окном программы(панель инструментов). Идея в том что панель инструментов должна быть не привязана к основному окну и при этом не отдельным окном реализовывать. Как сделал я. Я создал MDI форму, расширил ее на весь экран и теперь создаю в ней нужные мне панели и MDI формы при необходимости. При каждом изменении размеров панелей и добавлении-удалении других панелей, просто заново формирую область видимости своей формы. Использую такой код:

private void CreateMainRegion()
        {
            // создаем с область формы, которую мы хотим видеть
            Region mainRegion = null;
            foreach (var control in this.Controls)
            {
                if (control is ScrollableControl other_panel)
                {
                    Rectangle rectOtherItem = new Rectangle(other_panel.Left, other_panel.Top, other_panel.Width, other_panel.Height);
                    if (mainRegion == null)
                        mainRegion = new Region(rectOtherItem);
                    else
                        mainRegion.Union(rectOtherItem);
                }
            }
            foreach (var control in this.MdiChildren)
            {
                if (control is Form other_MDI_Form)
                {
                    Rectangle rectOtherMDIform = new Rectangle(other_MDI_Form.Left, other_MDI_Form.Top, other_MDI_Form.Width, other_MDI_Form.Height);
                    if (mainRegion == null)
                        mainRegion = new Region(rectOtherMDIform);
                    else
                        mainRegion.Union(rectOtherMDIform);
                }
            }
            // устанавливаем видимую область
            this.Region = mainRegion;
        }

Ответы (0 шт):