2

我在一个表单中有 2 个组合框。

当combobox2 中的列表更新时,我希望combobox1 中的选定值发生变化。

例如:ComboBox1 包含移动公司的名称,ComboBox2 包含该公司所有手机的列表。

4

3 回答 3

3

假设您有一个将手机型号与其制造商相关联的字典:

Dictionary<string, string[]> brandsAndModels = new Dictionary<string, string[]>();

public void Form_Load(object sender, EventArgs e)
{
    brandsAndModels["Samsung"] = new string[] { "Galaxy S", "Galaxy SII", "Galaxy SIII" };
    brandsAndModels["HTC"] = new string[] { "Hero", "Desire HD" };
}

您可以获得要在左侧组合框中显示的项目:

foreach (string brand in brandsAndModels.Keys)
    comboBox1.Items.Add(brand);

您只需执行一次,例如在表单的Load事件中。注意:brandsAndModels字典必须是实例变量,而不是局部变量,因为我们稍后需要访问它。

然后,您必须为该事件分配一个事件处理程序SelectedIndexChanged,在其中将第二个组合框中的项目替换为所选品牌的数组中的项目:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    comboBox2.Items.Clear();

    if (comboBox1.SelectedIndex > -1)
    {
        string brand = brandsAndModels.Keys.ElementAt(comboBox1.SelectedIndex);
        comboBox2.Items.AddRange(brandsAndModels[brand]);
    }
}

如果所有这些都来自数据库,那么使用数据绑定会更好,如我在评论中链接到您的问题的问题的答案中所述。

于 2012-12-19T14:11:42.197 回答
2

您必须处理SelectedIndexChanged组合框的事件才能实现

于 2012-12-19T14:03:23.127 回答
2

当您看起来很新时,我将逐步向您解释。

  1. 右键单击 ComboBox1 并选择属性。
  2. 这将打开属性面板。
  3. 从属性面板顶部选择事件按钮。
  4. 将显示与组合框相关的所有事件列表。
  5. 从此列表中双击 SelectedIndexChanged。
  6. private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) {} 将被创建

您可以在此之后使用以下代码。

Dictionary<string, string[]> models = new Dictionary<string, string[]>();
public Form1()
{
    InitializeComponent();

    //initializing combobox1
    comboBox1.Items.Add("Select Company");
    comboBox1.Items.Add("HTC");
    comboBox1.Items.Add("Nokia");
    comboBox1.Items.Add("Sony");

    //select the selected index of combobox1
    comboBox1.SelectedIndex = 0;

    //initializing model list for each brand
    models["Sony"] = new string[] { "Xperia S", "Xperia U", "Xperia P" };
    models["HTC"] = new string[] { "WildFire", "Desire HD" };
    models["Nokia"] = new string[] { "N97", "N97 Mini" };
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    comboBox2.Items.Clear();

    if (comboBox1.SelectedIndex > -1)
    {
        string brand = comboBox1.SelectedItem.ToString();
        if(brand != "" && comboBox1.SelectedIndex > 0)
            foreach (string model in models[brand])
                comboBox2.Items.Add(model);
    }
}
于 2012-12-19T15:02:19.687 回答