2017-10-01 19 views
-1

私は、50単語のランダムな単語を含むファイルを読み込むプログラムを作ろうとしています.3文字以下の単語をSmallWordsというリストに、4単語以上の単語をLargeWordsというリストに格納します。私はWindowsフォームを使用して、私は2列のリストビューコントロールを持っています... '小さな言葉'と '大きな言葉'。私がしたいことは、対応する列に単語を置くことだけであることは明らかです。事は、ファイルが25の小さな25の言葉のように持っていないということです、あなたは知っていますか?たぶんそれは30の小さな単語と20の大きな単語を持っているので、ListViewにアイテムを追加するためにこのループを実行すると、この例外がスローされます。このArgumentOutOfRangexceptionの処理方法は?

ArgumentOutOfRangeException。

これは、例外はこのラインitem.SubItems.Add(LargeWords[index]);

これを処理する方法はありますでスローされる

var MaxNum = Math.Max(SmallWords.Count, LargeWords.Count); 

for (var index = 0; index < MaxNum; index++) 
{ 
    ListViewItem item = new ListViewItem(SmallWords[index]); 
    item.SubItems.Add(LargeWords[index]); 
    listView1.Items.Add(item); 
} 

私のコードですか?列に項目を追加する別の方法がありますか? Math.Max(...);からMath.Min(...)に変更すると、単語が追加されますが、20個の大きな単語と20個の小さな単語が追加されるため、SmallWords列に10個の小さな単語が表示されなくなります。

おかげ

答えて

0

私はこの問題を別の方法で見てください。基本的には同じインデックスの小さな単語にiのインデックスに大きな単語を追加しています。つまり、にはLargeWordをサブワードとして追加するSmallWordが必要です。 SmallWordsのカウントをループして、インデックスが範囲内にある場合は、LargeWordsを追加してください:

for (var index = 0; index < SmallWords.Length; index++) 
{ 
    ListViewItem item = new ListViewItem(SmallWords[index]); 
    if(index < LargeWords.Length) 
    { 
     item.SubItems.Add(LargeWords[index]); 
    } 
    listView1.Items.Add(item); 
} 
+0

ありがとうございました!それはすべきように働いた! –

1

あなたは長さの異なる二つの配列を持ち、両方の配列の最大のをループしてみてください、アクセスアップ。それは決してうまくいかない。より小さい配列の限界に達すると、範囲外の例外が発生します。

修正する2つのオプションは、実行する操作によって異なります。より小さい配列の最大値までループすることができます。または、最大値に達した後に小さい配列を処理する部分をスキップできます。

var MaxNum = Math.Min(SmallWords.Count, LargeWords.Count); 
      // ^--- Changed Max to Min 

for (var index = 0; index < MaxNum; index++) 
{ 
    ListViewItem item = new ListViewItem(SmallWords[index]); 
    item.SubItems.Add(LargeWords[index]); 
    listView1.Items.Add(item); 
} 
関連する問題