Я пишу приложение Windows Forms, которое использует два вложенных SplitContainer с DataGridViews в двух из трех доступных областей, как показано на следующем изображении. Я подключил параметры и инициализацию формы, чтобы пользователь мог отключить многопанельные форматы в пользу однопанельного представления, состоящего только из первого DataGridView.
Основная проблема здесь (как я объясню (надеюсь) достаточно подробно) заключается в том, что DataGridViews не придерживаются ограничений панелей SplitContainer, если другие панели скрыты.
Здесь красный контур указывает на родительский SplitContainer, который в ссылках соответствующим образом называется masterSplitContainer
. Синий контур указывает на дочерний SplitContainer под названием bottomSplitContainer
, занимающий позицию masterSplitContainer.Panel2
.
DataGridView занимают как области masterSplitContainer.Panel1
, так и bottomSplitContainer.Panel1
, и я разработал код инициализации так, чтобы программа учитывала три возможности:
- Пользователь хочет, чтобы представление / макет пользовательского интерфейса только с одной панелью, таким образом,
masterSplitContainer.Panel1
занимали всю областьmasterSplitContainer
. - Пользователь включает макет с двумя панелями, но удаляет панель 2 нижнего контейнера.
- Пользователь хочет все три панели.
Как показала моя тестовая сборка только с SplitContainer'ами, второй SplitContainer (дочерний) получил желаемую точку и был полностью доволен этим расположением без каких-либо препятствий. Однако, когда тестируются настройки для включения однопанельного просмотра, вот результат:
masterSplitContainer.Panel2
отключается следующим кодом:
masterSplitContainer.Panel2Collapsed = true;
masterSplitContainer.Panel2.Hide();
В этом случае я хотел бы, чтобы DataGridView принимал на себя всю рабочую область masterSplitContainer, а не сохранял его предопределенные границы, которые были установлены просто потому, что там был разделитель панелей, когда я добавил часть.
Для процесса исключения то же самое происходит со вторым DataGridView, помещенным в дочерний SplitContainer (то есть bottomSplitContainer.Panel1
) - он также не подчиняется области своего вложения.
Я немного читал об этом, и похоже, что это может быть проблема с привязкой, но у меня очень ограниченный опыт работы с .NET и Windows Forms, поэтому это может занять немного руки или указания из очевидных ошибок.
Кроме того, если вам нужно больше актуальных ссылок на код, я буду рад опубликовать класс формы по запросу.