当前位置: 首页 > 知识库问答 >
问题:

如何更新由另一个组合框触发的组合框中的值?

许博
2023-03-14

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

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

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

共有3个答案

皮自明
2023-03-14

当你看起来新的时候,我会一步一步地向你解释。

  1. 右键单击 ComboBox1 并选择属性。
  2. 这将打开属性面板。
  3. 从属性面板顶部选择事件按钮。
  4. 将显示与组合框相关的所有事件的列表。
  5. 从此列表中双击 选定索引已更改.
  6. 私有 void comboBox1_SelectedIndexChanged(对象发送器,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);
    }
}
鄢开诚
2023-03-14

为此,您必须处理combobox的< code > selectedindex changed 事件

曹乐意
2023-03-14

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

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事件中。注意:<code>brandsAndModels</code>字典必须是实例变量,而不是局部变量,因为我们需要稍后访问它。

然后,您必须为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]);
    }
}

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

 类似资料:
  • 我正在尝试使用两个ttk组合框从sqlite数据库中获取数据。我设法使用combo_division()函数在一个名为的组合框中列出项目。现在我试图对第二个名为产品菜单的组合框做类似的事情,但是列表需要根据组合框中的第一个选定项目缩小范围。 为了让SQL查询传递第二个组合框所需的信息,我想到了这样的东西: 到目前为止两个组合框的代码:

  • 问题内容: 我有一个带有组合框的UI。每次组合将要打开列表时,必须刷新可以选择的项目列表。 有什么办法-即添加一个侦听器,该侦听器将通知UI Combo即将打开? 不幸的是,当列表更改时,我无法观察模型来更新列表。 问题答案: 不幸的是,SWT组件没有这种方法。在Swing中,借助于PopupMenuListener接口将很容易。 我可以想到的一种解决方法是实现MouseListener和Keyb

  • 我有两个组合框: 根据comboBoxMainCategory中选择的值,comboBoxSubCategory应填充相应的枚举。 如果comboBoxMainCategory选择“Europe”,则comboBoxSubCategory应填充SubCategory Europe。如果为“USA”,则带有子类别USA。 你是如何做到这一点的? 这是我的代码: 问题是,因为comboBoxSubCa

  • 几个小时寻找答案后,我终于放弃了。我有一个包含以下组合框的FXML表单: 它注入到 JavaFX 控制器类中: 该组合显示了使用Eclipselink 2.7和JPA 2.2从嵌入式H2数据库加载的Tobra(在西班牙语中代表Tipo de Obra)列表。 我不会向用户展示Tobra的价值。toString,相反,我在初始化中设置了一个转换器: 我有一个实现<code>Task的内部类 当然,当

  • 我的表单上有2个组合框(在表单加载事件中)。第一个组合框在表单加载后从选择语句中获取一个值。我想在我的第二个组合框中使用该值。这是我的代码: 1st组合框= cbDelivery 2de组合框= cbOrderNo 此组合框位于: private void CB delivery _ selectedindex changed(对象发送方,事件参数e) 因此,一旦我从1ste组合框中选择一个值,我

  • 提前谢了。