Я бы порекомендовал вам использовать CheckedListBox при работе с неизвестным количеством опций. Вот полный пример, который показывает, как использовать событие ItemCheck для ограничения общего числа выборов.
var box = new CheckedListBox
{
Dock = DockStyle.Fill,
CheckOnClick = true
};
box.ItemCheck += (sender, e) =>
{
// is the item being checked when 3 are already checked?
if (e.NewValue == CheckState.Checked && box.CheckedItems.Count == 3)
{
// block the change
e.NewValue = CheckState.Unchecked;
}
};
for (var i = 0; i < 10; i++)
{
box.Items.Add("item " + i);
}
new Form {Controls = {box}}.ShowDialog();
Edit:
Вы можете создать сгруппированный вид, удалив границы списка, вложив его в GroupBox и изменив цвет фона.
box.BorderStyle = BorderStyle.None;
box.BackColor = Control.DefaultBackColor;
box.MultiColumn = true;
box.IntegralHeight = false;
var group = new GroupBox
{
Text = "Options",
Dock = DockStyle.Fill,
Controls = {box}
};
![Group Check Box](https://i.stack.imgur.com/JcmaH.png)