Я не могу понять, куда поместить мою переменную - PullRequest
0 голосов
/ 13 января 2012

Хорошо, вот моя проблема. Когда я проверяю флажок cbPause (cbPause = true), тогда мой счет начинается 1, а не 0. Счетчик называется tickCount, и если я положу tickCount внутри if (cbPause.Checked == true). Если я поставлю его как конец моего метода Interval, он также начинается с 1, а не с 0. Где я должен разместить инкрементную переменную в моей ситуации, чтобы она начиналась с 0? У меня где-то должно быть tickCount++;, но я не знаю где.

PS. tickCount используется, чтобы увидеть, какую строку я должен набрать. Он начинается с 0, поэтому я набираю строку 0 из ListBox.

Это основной таймер, отсчитывающий время между каждым введенным сообщением:

private void Interval(object sender, EventArgs e)
{
    if (cbPause.Checked == true) 
    {
       randomLine = random.Next(lbMessage.Items.Count); 
       tmrSpace.Enabled = true;
    }
    else
    {
        if (cbRandomLine.Checked == true)
        {
            SendKeys.Send(lbMessage.Items[random.Next(lbMessage.Items.Count)].ToString() + "{enter}");
        }
        else
        {
            if (tickCount < lbMessage.Items.Count)
            {
                SendKeys.Send(lbMessage.Items[tickCount].ToString() + "{enter}");
                if (tickCount == lbMessage.Items.Count) tickCount = 0;
                tickCount++;
            }
        }
    }

    SetInterval();
}

Этот метод является вторым таймером, который позволяет мне печатать как пишущая машинка, которая печатает строку с небольшими промежутками времени между каждым символом.

private void Space(object sender, EventArgs e)
{
    if (cbRandomLine.Checked == true)
    {
        SendKeys.Send(lbMessage.Items[randomLine].ToString().Substring(currentChar++, 1));

        if (currentChar == lbMessage.Items[randomLine].ToString().Length)
        {
            SendKeys.Send("{enter}");
            tmrSpace.Enabled = false;
            currentChar = 0;
        }
    }
    else
    {
        if (tickCount < lbMessage.Items.Count)
        {
            SendKeys.Send(lbMessage.Items[tickCount].ToString().Substring(currentChar++, 1));

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

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

Любые советы высоко ценятся. Заранее спасибо.

Ответы [ 2 ]

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

Вот как я это сделал.Просто добавил одну проверку бул:

private void Interval(object sender, EventArgs e)
{
    if (cbPause.Checked) 
    {
       randomLine = random.Next(lbMessage.Items.Count); 
       tmrSpace.Enabled = true;

       if (whenStart)
           tickCount++;
       else whenStart = true;
    }
    else
    {
        if (cbRandomLine.Checked)
        {
            SendKeys.Send(lbMessage.Items[random.Next(lbMessage.Items.Count)].ToString() + "{enter}");
        }
        else
        {
            if (tickCount < lbMessage.Items.Count)
            {
                SendKeys.Send(lbMessage.Items[tickCount].ToString() + "{enter}");
                tickCount++;
            }
        }
    }

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

    SetInterval();
}
1 голос
/ 13 января 2012

Вы пробовали это?

if (tickCount == lbMessage.Items.Count)
   tickCount = cbPause.Checked ? 1 : 0;
else
   tickCount++;

В любом случае, в вашем коде cbPause.Checked всегда ложно, когда вы нажимаете эту часть, поэтому это может быть просто:

if (tickCount == lbMessage.Items.Count)
   tickCount = 0;
else
   tickCount++;

Также вы можете переписать метод пробела следующим образом:

private void Space(object sender, EventArgs e)
{
    if (cbRandomLine.Checked || tickCount < lbMessage.Items.Count)
    {
        var index = cbRandomLine.Checked ? randomLine : tickCount;
        var item = lbMessage.Items[index ].ToString();

        SendKeys.Send(item.Substring(currentChar++, 1));

        if (currentChar == item.Length)
        {
            SendKeys.Send("{enter}");
            tmrSpace.Enabled = false;
            currentChar = 0;
        }
    }

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