Есть два подхода к вашей проблеме.Первый грязный, второй элегантный.Под грязным и элегантным я подразумеваю способ их отображения.Метод, которым они работают, одинаков.
Я объясню вам, как это сделать в пустой форме, а вы просто реализуете это в своей заполненной форме.
- Сначала создайте новую форму.
- Добавьте к нему 2 или более групповых блоков
- Добавьте в них некоторые элементы (просто чтобы посмотреть, работает ли он)
- Вверху каждого поля добавьте кнопку, которая будет переключать видимость
Теперь наша форма выглядит следующим образом, и давайте посмотрим на ее код.
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Test
{
public partial class TestForm : Form
{
// This is property
bool ShowFirstGroupBox
{
get
{
// We let user get our property from private variable
return _ShowFirstGroupBox;
}
set
{
// When user change this property we do something based on that
switch(value)
{
case true:
groupBox1.Size = new Size(groupBox1.Width, FirstGroupBoxDefaultHeight);
break;
case false:
groupBox1.Size = new Size(groupBox1.Width, 55);
break;
}
_ShowFirstGroupBox = value;
}
}
bool ShowSecondGroupBox
{
get
{
return _ShowSecondGroupBox;
}
set
{
switch (value)
{
case true:
groupBox2.Size = new Size(groupBox1.Width, FirstGroupBoxDefaultHeight);
break;
case false:
groupBox2.Size = new Size(groupBox1.Width, 55);
break;
}
_ShowSecondGroupBox = value;
}
}
// We store our boxes current state ( TRUE = shown, FALSE = HIDDEN )
bool _ShowFirstGroupBox = true;
bool _ShowSecondGroupBox = true;
// We store our default height for groupboxes
int FirstGroupBoxDefaultHeight;
int SecondGroupBoxDefaultHeight;
public TestForm()
{
InitializeComponent();
// Assigning default height of our groupboxes
FirstGroupBoxDefaultHeight = groupBox1.Height;
SecondGroupBoxDefaultHeight = groupBox2.Height;
}
private void button1_Click_1(object sender, EventArgs e)
{
ShowFirstGroupBox = !(_ShowFirstGroupBox); // This sets our property value to opposite of this boolean
}
private void button1_Click_1(object sender, EventArgs e)
{
ShowSecondGroupBox = !(_ShowSecondGroupBox); // This sets our property value to opposite of this boolean
}
}
}
Теперь, когда у нас есть такой код и нажмитепри нажатии кнопки он свернет групповую коробку.
ПРИМЕЧАНИЕ. Элементы управления в групповой коробке все еще находятся на месте, но просто скрыты, поскольку они являются дочерними для групповой коробки, и все, что находится за пределами границ, невидимо для пользователя.
Это грязноКстати, я хотел бы отобразить его намного красивее со знаком МИНУС в правой части заголовка группы, поэтому у меня нет кнопки внутри него.Для этого вам нужно создать пользовательский элемент управления, который наследует групповой блок, добавить к нему кнопку, расположить его в строке заголовка и создать для него событие.Это легко, если вы когда-либо пытались создать пользовательские элементы управления, но если вы этого не сделали, и вы думаете, что подход dirty
вам подходит, тогда не пытайтесь.