我无法弄清楚我的增量变量放在哪里

时间:2012-01-13 04:58:25

标签: c# winforms timer increment

好的,这是我的问题。当我选中复选框cbPausecbPause = true)后,我的点数就会开始1而不是0。该计数器名为tickCount,如果我将tickCount放在if (cbPause.Checked == true)内。如果我把它放在我的Interval方法的末尾它也从1开始而不是0.我应该在哪里放置递增变量,在我的情况下,所以它从0开始?我必须在某处tickCount++;,但我不知道在哪里。

PS。 tickCount用于查看我必须键入的行。它从0开始,所以我从ListBox中键入第0行。

这是每个键入的消息之间的主计时器计时时间:

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 个答案:

答案 0 :(得分:1)

你试过这个吗?

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

无论如何,在您的代码中,当您点击该部分时,cbPause.Checked始终为false,因此它可能只是:

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);
}

答案 1 :(得分:1)

我就是这样做的。刚加了一个布尔检查:

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();
}