1

複数のコンボボックスを持つ Windows フォームに取り組んでいます。最初のコンボボックスで選択された内容に応じて、2 番目のコンボボックスに入力される項目が決まります。私が直面している問題は、ComboBox1 で ChoiceA を選択すると、ComboBox2 が clear() され、ChoiceX、ChoiceY、および ChoiceZ で埋められることです。次に、ComboBox1 で ChoiceB を選択します。ComboBox2 は clear() されますが、ComboBox2 に追加する選択肢がないため、空のままにする必要があります。問題は、ChoiceB を選択した後、ComboBox2 に 3 つの空のスロットがある大きな白いボックスがあることです。したがって、基本的に、どれだけ多くのアイテムがクリアされても 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

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 に答える