我正在编写C#Forms应用程序。 我的表单上有两个不同的面板,并且在两个面板上都创建了动态复选框。我想做的是:如果我在panel1上选中了一个特定的复选框,我想在panel2上禁用/启用一个特定的复选框。
foreach (Control checkbox_panel1 in checkBoxPanel1.Controls)
{
foreach (Control checkbox_panel2 in checkBoxPanel2.Controls)
{
if (checkbox_panel1 is CheckBox)
{
CheckBox cb_p1 = (CheckBox)checkbox_panel1;
CheckBox cb_p2 = (CheckBox)checkbox_panel2;
if (cb_p1.Checked)
{
cb_p2.Enabled = false;
}
else
{
cb_p2.Enabled = true;
}
}
}
}
我的代码没有执行我想要的操作。一键禁用和启用复选框。而且它禁用了Panel2中的所有复选框,我只想禁用一个特定的复选框。
答案 0 :(得分:0)
if(cb_p1.name == "your checkbox name")
{
if (cb_p1.Checked)
{
cb_p2.Enabled = false;
}
else
{
cb_p2.Enabled = true;
}
}
答案 1 :(得分:0)
在创建复选框时,需要设置其.Name属性:
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);
显然,由于您正在从数据库读取值,因此您的代码将有所不同。上面的关键点是我们设置了CheckBoxes的.Name
属性。
然后,在创建它们之后,要将“汽车”链接到“自行车清单”:
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;
};
}
}
现在,当您选中“汽车”时,“自行车清单”将被禁用。取消选中“汽车”时,“自行车清单”将再次启用。
如果有关“链接”的信息在数据库本身中,那么您可以自动执行此过程,而不是将“汽车”和“自行车清单”硬编码到LinkCheckBoxes()
调用中。