【发布时间】: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