InvalidArgument = значение '2' недопустимо для 'index'. При попытке ввести символы индивидуально - PullRequest
0 голосов
/ 13 января 2012

Я пытаюсь ввести строку с небольшими пробелами между каждым символом.

Затем я использую это, я получаю сообщение об ошибке: 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 Ответ

1 голос
/ 13 января 2012

Посмотрите на это:

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 и снова индексируете , в этот момент tickCount будет равен lbMessage.Items.Count, и вы получитеэто исключение.

Ваш код мне не совсем понятен (я устал), но вы, возможно, захотите перенести приращение tickCount в код позже ...

...