如何在组合框中选择不同的项目时动态更改复选框

时间:2012-04-17 14:29:33

标签: c# user-interface checkbox combobox

我正在尝试创建一个GUI,其中选择组合框内的项目会更改是否选中每个复选框。

GUI有很多复选框,用户可以选中或取消选中。

例如,用户可以从组合框中选择“项目1”,然后用户检查他想要检查的任何复选框。然后,当用户选择“项目2”时,从“项目1”检查的复选框将显示为灰色,用户可以检查或取消选中其余项目。

组合框中的每个项目基本上都会保存用户对复选框的选择。

有人能告诉我怎么做吗?

2 个答案:

答案 0 :(得分:1)

例如4个复选框,1个组合框

    public Form1()
    {
        InitializeComponent();
        for (int i = 0; i < 3; i++)
            comboBox1.Items.Add(i.ToString());
        comboBox1.Text = comboBox1.Items[0].ToString();
    }
    bool needtoupdate = true;
    public class CheckedItems
    {
        public CheckedItems()
        {
            for (int i = 0; i < b.Length; i++)
            {
                b[i] = false;
            }
        }
        public bool[] b = { false, false, false, false };
    }

    CheckedItems[] allcheckeditems = { new CheckedItems(), new CheckedItems(), new CheckedItems()};

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        needtoupdate = false;
        checkBox1.Checked = allcheckeditems[Convert.ToInt32(comboBox1.Text)].b[0];
        checkBox2.Checked = allcheckeditems[Convert.ToInt32(comboBox1.Text)].b[1];
        checkBox3.Checked = allcheckeditems[Convert.ToInt32(comboBox1.Text)].b[2];
        checkBox4.Checked = allcheckeditems[Convert.ToInt32(comboBox1.Text)].b[3];
        needtoupdate = true;
    }

    void saveallchecked()
    {
        if (!needtoupdate) return;
        allcheckeditems[Convert.ToInt32(comboBox1.Text)].b[0] = checkBox1.Checked;
        allcheckeditems[Convert.ToInt32(comboBox1.Text)].b[1] = checkBox2.Checked;
        allcheckeditems[Convert.ToInt32(comboBox1.Text)].b[2] = checkBox3.Checked;
        allcheckeditems[Convert.ToInt32(comboBox1.Text)].b[3] = checkBox4.Checked;
    }

    private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
    {
    }

    private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
        saveallchecked();
    }

    private void checkBox2_CheckedChanged(object sender, EventArgs e)
    {
        saveallchecked();
    }

    private void checkBox3_CheckedChanged(object sender, EventArgs e)
    {
        saveallchecked();
    }

    private void checkBox4_CheckedChanged(object sender, EventArgs e)
    {
        saveallchecked();
    }

答案 1 :(得分:0)

我会将你的复选框和组合放在更新面板中,为用户更改组合框创建一个事件,在这种情况下你必须循环查看哪些被检查,你设置的那个启用为false(它们会出现灰色)。

有用吗?