Windows窗体C#组合框列表框

时间:2014-10-15 07:20:48

标签: c# combobox listbox

private void cmbUsers_SelectedIndexChanged(object sender, EventArgs e)
{
        if (cmbUsers.SelectedText == "<All Users>")
        {
            //do stuff
        }
        else if (cmbUsers.SelectedText == "dbo")
        {
            //do stuff
        }
        else if (cmbUsers.SelectedText == "INFORMATION_SCHEMA")
        {
            //do stuff
        }
        else if (cmbUsers.SelectedText == "sys")
        {
            //do stuff
        }
}

我有一个表格,上面有一个组合框和一个列表框。

当用户从组合框列表中选择时,应显示所有列表框记录。但是当用户选择dbo时,只应在列表框中显示dbo.abc记录。当用户选择INFORMATION_SCHEMA记录时,应显示INFORMATION_SCHEMA.abc。我的英语不是很好。我希望你们都理解我的问题。

请帮帮我。

1 个答案:

答案 0 :(得分:1)

有很多方法可以解决这样的问题。

我的第一次尝试应该是创建Dictionary<string, List<string>>并将所有键添加到Combobox。他们的钥匙是你的&#34; dbo.abc&#34;等等,值是相应的记录 在Combobox索引更改事件上,然后清除列表框并将相应列表中的所有项目添加到其中。

对于所有项目,您可以添加一个&#34;所有列表&#34;组合框中的项目。然后,在测试中查看密钥是否存在于字典中,如果它不存在,您可以在foreachyourDictionary.Values并将它们全部添加到列表框中。

这可能是我做的方式。但是还有很多其他的,也许你应该开始改进你的C#语言,然后再提出这样的琐碎问题:)

编辑您的示例(假设您的列表框是cmbList):

private Dictionary<string, List<string>> _items;

private void cmbUsers_SelectedIndexChanged(object sender, EventArgs e)
{
    var cmbText = cmbUsers.SelectedText;
    cmbList.Items.Clear();

    if (_items.ContainsKey(cmbText)
    {
        cmbList.Items.AddRange(_items[cmbList]);           
    }
    else // default : show all items
    {
        foreach (var val in _items.Values)
        {
            cmbList.Items.AddRange(val);
        } 
    }        
}