我正在使用具有多个组合框的 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();
}