【问题标题】:I can't figure out where to put my incrementing variable我不知道把递增变量放在哪里
【发布时间】:2012-01-13 04:58:25
【问题描述】:

好的,这是我的问题。当我选中复选框 cbPause (cbPause = 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);
}

非常感谢任何提示。提前谢谢你。

【问题讨论】:

  • 我的范围很广。缩进层数越少,可能会更容易看到。例如。成对写else if
  • @EnabrenTane,我想不出更简单的解决方案。我在计时器里面有一个计时器,这让我很困惑。
  • 对,但是 ` else { if` 都在同一个逻辑范围内。那么你的最后一个双 if 语句几乎是一个 and 条件,除非你调用 SendKeys.Send
  • 您的代码没有问题。有什么不好的?
  • @ivowiblo,代码编译得很好。问题是我的增量不正确。我的打字从第 1 行而不是第 0 行开始。

标签: c# winforms timer increment


【解决方案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);
}

【讨论】:

  • 恐怕我做不到。 SendKeys.Send(lbMessage.Items[]) 都有些不同。一个有编号索引,一个是随机索引。
  • 我已经编辑,所以它支持两个索引。很抱歉造成混乱。
  • 我添加了一种根据 cbPause 的值设置开始的方法。
  • 哦,哇,这节省了不止几行代码。谢谢。但我想指出它并不能解决我的问题。但无论如何,谢谢,很好的解决方案。
  • 您是否检查了我提到的 Interval 方法的可能修复方法?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 2013-09-21
    • 2020-09-30
    • 1970-01-01
    相关资源
    最近更新 更多