2012-02-10 8 views
-1

私は基本的にちょうどループが永久に繰り返している間にこれを作ることができますか?私はちょうどそれを行う方法を理解することはできません。文字列の終わりに達すると例外がスローされます。私はgotoを試しましたが、間違ったプレーでそれを使っていただけではうまくいきませんでした。ループを永遠に繰り返す方法は?

private void checkBox2_CheckedChanged(object sender, EventArgs e) 
    { 
     if (this.checkBox2.Checked) 
     { 
      int startIndex = 0; 
      string str = "hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"; 
      int length = str.Length; 
      while (true) 
      { 
       Application.DoEvents(); 
       Thread.Sleep(200); 
       startIndex++; 
       string str2 = str.Substring(startIndex, 15); 
       label2.Text = str2; 
       if (startIndex == length) 
       { 
        startIndex = 0; 
       } 
+1

?それは問題の原因に関する手がかりになる可能性があります。 –

+0

System.ArgumentOutOfRangeException インデックスと長さは、文字列内の場所を参照する必要があります。 –

+0

ループを終了できることを確認してください。後で問題が発生する可能性があります。 – tcables

答えて

3

文字列(または配列またはリストまたはコレクション)の最後の有効なインデックスは、常に長さではなく長さ-1です。さらに、長さ15の部分文字列を取るので、実際には終わりの前に15文字を停止したいと考えています。あなたは

if(startIndex == length - 16) 
    startIndex = 0; 
1

あなたのwhileループは、それがSubstringへのお電話ですが、問題はありませんように、あなたのif文を変更したいと思います。

startIndexが十分に高くなると、文字列に15個以上の文字が含まれないので、SubstringArgumentOutOfRangeExceptionを投げます。この問題を解決するには

、あなたのような何かにあなたのif文を変更する必要があります:あなたのコードを投げている例外はどんな

if(startIndex == length - 16) 
+0

どうすれば修正できますか? –

0
if (startIndex + 15 == length) 
{ 
    startIndex = 0; 
} 
関連する問題