2012-01-13 3 views
0

私は各文字の間に小さなスペースを入れて文字列を入力しようとしています。InvalidArgument = '2'の値は 'index'には無効です。個別に文字を入力しようとしているとき

私はエラーが表示されます:InvalidArgument=Value of '2' is not valid for 'index'.行:if (currentChar == lbMessage.Items[tickCount].ToString().Length)私はテキストボックスと似ていましたが、私はListBoxのためにそれを行うことはできません。

private void Space(object sender, EventArgs e) 
{ 
    if (tickCount < lbMessage.Items.Count) 
    { 
     SendKeys.Send(lbMessage.Items[tickCount].ToString().Substring(currentChar++, 0)); 
     tickCount++; 

     if (currentChar == lbMessage.Items[tickCount].ToString().Length) 
     { 
      tmrSpace.Enabled = false; 
      SendKeys.Send("{enter}"); 
     } 

     if (tickCount >= lbMessage.Items.Count) tickCount = 0; 
    } 

    tmrSpace.Interval = random.Next(50, 100); 
} 

これは、テキストボックスのフィールドのために働く:

private void Space(object sender, EventArgs e) 
{ 
    SendKeys.Send(txtText.Text.Substring(b++, 1)); 

    tmrSpace.Interval = random.Next(50, 150); 

    if (b == txtText.TextLength) 
    { 
     tmrSpace.Enabled = false; 
     SendKeys.Send("{enter}"); 
    } 
} 

答えて

1

これを見て:

if (tickCount < lbMessage.Items.Count) 
{ 
    SendKeys.Send(lbMessage.Items[tickCount] // etc, irrelevant 
    tickCount++; 

    if (currentChar == lbMessage.Items[tickCount].ToString().Length) 

は今tickCountが正確lbMessage.Items.Count - 1であると仮定します。 最初ににインデックスを付けることができますが、tickCountとインデックスをもう一度に増やします。その時点でtickCountlbMessage.Items.Countになります。その例外が発生します。

あなたのコードは、(私は疲れている)私には特に明確ではないですが、あなたもtickCountに、後にコードでの増加分を移動することがあります...

+0

まあ私の刻みのフォークだけでなく、私の古いコードからテキストボックスと、文字間の間隔を入れて入力するときに使用します。私は自分のコードです。私は行単位で読み込み、文字間にスペースを入れて行を入力しようとしています。多分私は.Lengthプロパティに問題があります。これを使って、人間のキャラクターが文字列にどのようにしているかを調べることはできますか? – NewHelpNeeder

+0

@NewHelpNeeder:あなたが何を意味するのかはっきりしませんが、なぜ例外が発生しているのか説明しました。 'if'条件は' lbMessage.Items [tickCount] '* before *' tickCount 'がインクリメントされます。あなたはその部分を理解していますか? –

+0

さて、私は今これを取得すると思います。私の増分変数の配置が間違っていたのは間違いありませんでした。ありがとう。 – NewHelpNeeder

関連する問題