将多个复选框绑定到多个列表框属性

时间:2015-11-06 20:48:30

标签: c# checkbox listbox

我有30个列表框和30个复选框。我希望每个复选框都控制每个listbox.enabled属性。现在,我最好的想法是创建30种不同的方法,每对一对checkbox1 - listbox1,checkbox2 - listbox2等,但我不认为如果我需要在将来添加更多对,这种方法可以很好地扩展

有更简单的方法吗?我想到了一个遍历表单中每个复选框的foreach循环,但是如何让循环理解如果它处理checkbox15它应该改变listbox15的.enabled? 我对此非常陌生,所以我很欣赏不同的建议:)

截至目前,我有30个:(其余的更改为checkBox2 / listBox2等)

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
        if (checkBox1.Checked)
        {
            if (listBox1.Items.Count >= 1)
            {
                tillgangligaForare.Items.Add(listBox1.Items[0]);
                listBox1.Items.Clear();
                uppdateraSummering();
            }

            listBox1.Enabled = false;
            listBox1.Items.Add("FORDON EJ I BRUK");
        }
        else
        {
            listBox1.Items.Clear();
            listBox1.Enabled = true;
        }
}

3 个答案:

答案 0 :(得分:1)

以下是几种可能的方法:

  • 使用Bindings将列表框上的Enabled属性绑定到其复选框上的Checked属性。您仍然需要编写代码来创建所有绑定(可能有一种方法可以在可视化设计器中执行此操作)

  • 为列表框创建一个复选框字典,并创建一个单击处理程序(您将为每个复选框提供),它将使用" sender"查找正确的列表框以从字典启用/禁用的参数。

这两个都涉及您在添加另一对控件时必须记住更新的代码,但两者都应该只需要为每个新对提供一个或两个新行。

答案 1 :(得分:1)

从发件人参数中找到复选框名称。使用以下命令查找与数字后缀匹配的列表框控件:

int suffix = 1; // Get from Checkbox name suffix
ListBox tbx = this.Controls.Find("listbox" + suffix, true).FirstOrDefault() as ListBox;
tbx.Enabled = false;

答案 2 :(得分:0)

将Lotharyx和Sasway Padhan的两个建议与Form的Load()事件结合起来,给出:

    private Dictionary<CheckBox, ListBox> lookup = new Dictionary<CheckBox, ListBox>();

    private void Form1_Load(object sender, EventArgs e)
    {
        ListBox lb;
        CheckBox cb;

        for (int i = 1; i <= 30; i++)
        {
            lb = this.Controls.Find("listBox" + i.ToString(), true).FirstOrDefault() as ListBox;
            cb = this.Controls.Find("checkBox" + i.ToString(), true).FirstOrDefault() as CheckBox;
            if (lb != null && cb != null)
            {
                lookup.Add(cb, lb);

            }
        }
    }

    private void checkBoxes_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox cb = sender as CheckBox;
        if (lookup.ContainsKey(cb))
        {
            ListBox lb = lookup[cb];

            if (cb.Checked)
            {
                if (lb.Items.Count >= 1)
                {
                    tillgangligaForare.Items.Add(lb.Items[0]);
                    lb.Items.Clear();
                    uppdateraSummering();
                }

                lb.Enabled = false;
                lb.Items.Add("FORDON EJ I BRUK");
            }
            else
            {
                lb.Items.Clear();
                lb.Enabled = true;
            }
        }            
    }