基于comboBox1选择,我填充了comboBox2。 comboBox2具有可变数量的列表项。目前我手动这样做:
string[] str1 = { "item1", "item2" }
string[] str2 = { "item1", "item2", "item3" , "item4" }
等
if (cbox1.SelectedIndex == 0)
{
cbox2.Items.AddRange(str1);
}
if (cbox1.SelectedIndex == 1)
{
cbox2.Items.AddRange(str2);
}
等
虽然这有效但我有4个下拉事件和13个可能的选择。这使得很多if。我更喜欢用一个字符串数组来做这个,这样我就可以摆脱所有的if并且只为每个SelectedIndexChanged执行以下操作:
cbox2.Items.AddRange(str[cbox1.SelectedIndex]);
但我不确定我是否可以使用字符串的可变长度来执行此操作。我这样做时会出错:
string[,] str = { { "Item1", "Item2"},{"Item1", "Item2", "Item3", "Item4"} };
有办法做到这一点吗?
谢谢!
答案 0 :(得分:7)
您已经发现在这种情况下不能使用multidimensional array,因为您的数组具有不同的长度。但是,您可以改为使用jagged array:
string[][] str =
{
new string[] { "Item1", "Item2" },
new string[] { "Item1", "Item2", "Item3", "Item4" }
};
答案 1 :(得分:1)
您可以使用Dictionary并将SelectedIndex值映射到字符串数组(甚至更好,IEnumerable<string>
):
IDictionary<int, string[]> values = new Dictionary<int, string[]>
{
{0, new[] {"item1", "item2"}},
{1, new[] {"item3", "item4", "item5"}},
};
...
string[] items = values[1];
答案 2 :(得分:1)
您还可以使用字典来实现目标:
Dictionary<int, string[]> itemChoices = new Dictionary<int,string>()
{
{ 1, new [] { "Item1", "Item2" }},
{ 2, new [] { "Item1", "Item2", "Item3", "Item4" }}
};
然后你可以简单地打电话:
cbox1.Items.AddRange(itemChoices[cbox1]);
cbox2.Items.AddRange(itemChoices[cbox2]);