2012-02-22 9 views
0

私は、テキストを含む大規模な文字列を持っている:私はこの文字列の値に基づいて、それのアイテムをリストボックスを作成しようとしています大きな文字列からリストボックス項目を作成

"value 1 

value 2 

value 3 

etc..." //over 100 values 

を。

私は、エラーを停止した範囲の例外のうちの引数を得ていたように私は、tryキャッチを使用しますが、私は、リストボックス内のすべての項目を見ることができません:P

string value = ""; 

int currentIndexPos = 0; 

foreach (System.Text.RegularExpressions.Match m in System.Text.RegularExpressions.Regex.Matches(listStr, "\r\n?")) 
{ 
    try 
    { 
     value = formatted.Substring(currentIndexPos, m.Index - 1); // -1 so the matched value isn't used. 

     listBox1.Items.Add(value); 

     currentIndexPos = m.Index + 1; 
    } 

    catch 
    { 
     //argument out of range exception 
     //Index and length must refer to a location within the string. Parameter name: length 
    } 
} 
+0

m.Indexの値を調べましたか? – kaj

+0

最初のマッチでは、mのインデックスは0ですか?したがって、m.Index - 1は引数を範囲外のエラーにしますか? –

答えて

2

多くの人が言っているように、String.Splitを使用してください。しかし、foreachループやLINQに頼る必要はありません。

listBox1.Items.AddRange(String.Split(...)); 
+0

作品は完全に:) – cheeseman

2

この

のようなものを試してみてください
var values = listStr.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 
foreach(string value in values) 
{ 
    listBox1.Items.Add(value); 
} 
+0

私は間違った変数を使用して始めました:P – cheeseman

+1

は、2つの回答の組み合わせを使用して終了しました:P listBox1.Items.AddRange(formatted.Split( "\ r \ n" .ToCharArray()、StringSplitOptions.RemoveEmptyEntries )); – cheeseman

1

あなたは本質的に分割を行っているので、なぜその関数を使用せず、インデックス操作を無視するのですか?

var lst = String.Split("\r".ToCharArray(),"listStr"); 
lst.select((x)=>listBox1.Items.Add(x)); 
+0

これを追加しようとすると、「string.Split(params char [])の最適オーバーロードされたメソッドが無効な引数を持っています」 – cheeseman

+0

これはエディタではなく、今すぐ試してみてください。 – rerun

+0

私もそれを追加しようとしました:Pまだエラーが発生します、私はそれが何らかの理由でString.Splitかもしれないと思います。VS2010はそれを認識しません...それはSystem.String.Splitのです:Pしかし、他のすべてのように... – cheeseman

関連する問題