Изменить размер панели, чтобы подогнать содержащиеся элементы в окнах форм - PullRequest
10 голосов
/ 28 сентября 2011

Я создаю складной элемент панели, который, по сути, будет элементом панели с элементом кнопки и элементом панели под кнопкой.При нажатии на кнопку на соседней панели появляется Visible = false.Я хотел бы изменить размер содержащей панели, когда дочерняя панель установлена ​​на невидимый.

Я сделал это вручную, установив свойство Size, чтобы оно было суммой ширины и высоты видимых элементов (или кнопка, или кнопка, и дочерняя панель.)

Мне любопытно узнать, был ли способ принудительно изменить размер содержащей панели без ручного вызова Size.

Я предполагаю, что ищу обратное свойство Dock=Fill, которое автоматически изменяет размеры элементов в зависимости от размера содержащего их элемента.

Заранее спасибо.

Ответы [ 2 ]

8 голосов
/ 28 сентября 2011

Как насчет:

panel1.Size = new Size(0, 0);
panel1.AutoSize = true;

и затем вместо изменения видимости сделайте следующее:

panel1.Controls.Remove(panel2);

и когда вы хотите вернуть его:

panel1.Controls.Add(panel2);

(панель 1 - задняя панель)

4 голосов
/ 22 октября 2013

Я только что попробовал ответ, заданный Испиро .Вы не должны удалить и добавить элемент управления.Настройка Visible может работать.Это зависит от того, когда вы выполняете макет.Если панель2 выполняет компоновку до панели1, панель2 не изменит размер.Чтобы сделать это проще, используйте вместо родителей PerformLayout.

Используется так:

panel1.ResumeLayout(false);
panel2.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
...