2012-04-17 45 views
0

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

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

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

从combobox的每个项目基本上保存用户的选择在复选框。

任何人都可以告诉我如何做到这一点?

回答

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(); 
    } 
+0

谢谢你的帮助。 – js0823 2012-04-17 16:41:04

0

我会把你的复选框,并组合一个更新面板中,创建一个当用户改变组合框,在此事件中的一个事件,你必须环路看看哪些被选中,你设置的这个是否启用false(它们会显示为灰色)。

它是否有用?