2011-12-13 21 views
3

comboBox1の選択に基づいて、comboBox2に値を設定します。 comboBox2は、リストアイテムの量が可変である。現在、私はこのように手動でこれをやっている:C#可変長文字列配列

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のためになります。私がもしさんの全てを取り除くことができるように文字列の配列でこれを行うことを好むだろうとちょうどそれぞれに次の操作を行いますのSelectedIndexChanged:

cbox2.Items.AddRange(str[cbox1.SelectedIndex]); 

が、私は私がこれを行うことができるかどうかわかりませんストリングの可変長。

string[,] str = { { "Item1", "Item2"},{"Item1", "Item2", "Item3", "Item4"} }; 

これを行う方法はありますか?

ありがとうございます!

答えて

7

この場合、アレイの長さが異なるため、multidimensional arrayを使用できないことが既に判明しています。しかし、あなたの代わりにjagged arrayを使用することもできます。

string[][] str = 
{ 
    new string[] { "Item1", "Item2" }, 
    new string[] { "Item1", "Item2", "Item3", "Item4" } 
}; 
+0

完璧!ありがとうございました! –

1

をあなたは辞書を使用して、文字列配列(またはより良い、IEnumerable<string>)にごSelectedIndexを値をマッピングすることができます

IDictionary<int, string[]> values = new Dictionary<int, string[]> 
           { 
            {0, new[] {"item1", "item2"}}, 
            {1, new[] {"item3", "item4", "item5"}}, 
           }; 
... 
string[] items = values[1]; 
+0

私はこれを考えていませんでしたが、少なくともこの解決策も試してみます。 –

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]); 
+0

そして明らかに@Strilloは私がポストをクリックするのを殴った(私はもともとLINQを使うつもりだった)。私の実装は若干異なります。 –

+0

あなたのソリューションにも感謝します。 –