Вам необходимо установить свойство .Name ваших CheckBoxes при их создании:
CheckBox cb1 = new CheckBox();
cb1.Name = "Car"; // make sure you set the NAME property!
cb1.Text = "Car";
panel1.Controls.Add(cb1);
CheckBox cb2 = new CheckBox();
cb2.Name = "Bcylist"; // make sure you set the NAME property!
cb2.Text = "Bicyclist";
panel2.Controls.Add(cb2);
Очевидно, ваш код будет другим, поскольку вы читаете значения из База данных. Ключевым моментом выше является то, что мы устанавливаем свойство .Name
для CheckBoxes.
Затем, после того, как вы их создали, вы хотите связать «Car» с «Bcylist»:
LinkCheckBoxes("Car", "Bcylist");
Использование этого вспомогательного метода:
private void LinkCheckBoxes(string cbName1, string cbName2)
{
var ctl1 = this.Controls.Find(cbName1, true).FirstOrDefault();
var ctl2 = this.Controls.Find(cbName2, true).FirstOrDefault();
if (ctl1 != null && ctl1 is CheckBox && ctl2 != null && ctl2 is CheckBox)
{
CheckBox cb1 = (CheckBox)ctl1;
CheckBox cb2 = (CheckBox)ctl2;
cb1.CheckedChanged += (s, e) => {
cb2.Enabled = !cb1.Checked;
};
}
}
Теперь, когда вы отметите «Автомобиль», «Bcylist» будет отключен. Когда вы снимете флажок «Автомобиль», «Bcylist» снова включится.
Если информация о «связывании» была в самой базе данных, вы могли бы автоматизировать этот процесс вместо жесткого кодирования «Car» и «Bcylist» "на звонок LinkCheckBoxes()
.