选中复选框后,启用/禁用特定面板中的特定复选框

时间:2020-07-10 15:27:35

标签: c# winforms checkbox panel

我正在编写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中的所有复选框,我只想禁用一个特定的复选框。

2 个答案:

答案 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()调用中。