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