1

我正在使用具有多个组合框的 Windows 窗体。根据在第一个组合框中选择的内容确定将哪些项目填充到第二个组合框中。我遇到的问题是如果我在 ComboBox1 中选择 ChoiceA,ComboBox2 是 clear()ed,然后填充有 ChoiceX、ChoiceY 和 ChoiceZ。然后我在 ComboBox1 中选择 ChoiceB,ComboBox2 是 clear()ed,但是没有选项可以添加到 ComboBox2,所以它应该保持为空。问题是,在选择ChoiceB 后,ComboBox2 中有一个带有三个空槽的大白框。所以,基本上,无论多少项目被清除N,这就是选择ChoiceB后出现的空槽数。

这可能有点令人困惑,我希望我解释得足够好。

- 编辑添加代码,希望它有助于清除问题。顺便说一句,mainItemInfo 是另一个“viewmodel”类型的类。它与表单交互以进行更新。

private void cmbType_SelectedIndexChanged(object sender, EventArgs e)
    {
        DropDownItem item = (DropDownItem)cmbType.SelectedItem;
        if (!String.IsNullOrWhiteSpace(item.Text))
        {
            cmbBrand.Enabled = true;
            btnAddBrand.Enabled = true;

            mainItemInfo.FillBrands(new Dictionary<string, string> { { "Type", item.Text } });
            mainItemInfo.SyncBrands(this);
        }
    }

public void FillBrands(Dictionary<string, string> columnsWhere)
    {
        // Clear list
        Brands.Clear();
        // Get data
        StorageData storage = new StorageData(File.ReadAllLines(ItemsFilePath));
        // Fill Brands
        foreach (string type in storage.GetDistinctWhere(columnsWhere, "Brand"))
        {
            Brands.Add(type, new DropDownItem(type, type));
        }
    }

public void SyncBrands(IPopupItemInfo form)
    {
        form.ClearcmbBrand();
        var brands = from brand in Brands.Keys
                     orderby Brands[brand].Text ascending
                     select brand;
        foreach (var brand in brands)
        {
            form.AddTocmbBrand(Brands[brand]);
        }
    }

public void AddTocmbBrand(DropDownItem brand)
    {
        cmbBrand.Items.Add(brand);
    }

    public void ClearcmbBrand()
    {
        cmbBrand.Items.Clear();
    }
4

3 回答 3

4

简单地说,您可以添加一个项目,然后再次清除组合框:

   cmbBrand.Items.Clear();
   cmbBrand.Items.Add(DBNull.Value);
   cmbBrand.Items.Clear();
于 2017-08-03T13:40:04.830 回答
1

您应该能够将 listbox2 的数据源设置为 null 以清除它,然后使用新数据再次设置它。

因此,在伪代码中,类似于:

ItemSelectedInListBox1()
{
    List futureListbox2Items = LoadOptionsBaseOnSelectedItem(item)

    Listbox2.Datasource = null
    Listbox2.Datasource = futureListBox2Items
}

这应该刷新 Listbox2 中显示的项目列表,没有空格。

于 2012-09-11T20:20:31.207 回答
1

我能够修复额外的空间。我将 Add 和 Clear 方法更改为:

public void AddTocmbModel(DropDownItem model)
    {
        cmbModel.Items.Add(model);
        cmbModel.DropDownHeight = cmbModel.ItemHeight * (cmbModel.Items.Count + 1);
    }

    public void ClearcmbModel()
    {
        cmbModel.Items.Clear();
        cmbModel.DropDownHeight = cmbModel.ItemHeight;
    }
于 2012-09-12T14:24:07.633 回答