0

我想创建类似自动打字机的东西。

我有 5 个文本框,我正在使用计时器。

我想在从每个文本框发送的文本之间有 5 秒的“暂停/延迟”。

这是我的 Timer_Tick 事件:

private void Timer_Tick(object sender, EventArgs e)
    {
        if (txt1.Text != string.Empty)
        {
            SendKeys.Send(this.txt1.Text);
            SendKeys.Send("{ENTER}");
        }

        if (txt2.Text != string.Empty)
        {
            SendKeys.Send(this.txt2.Text);
            SendKeys.Send("{ENTER}");
        }

        if (txt3.Text != string.Empty)
        {
            SendKeys.Send(this.txt3.Text);
            SendKeys.Send("{ENTER}");
        }

        if (txt4.Text != string.Empty)
        {
            SendKeys.Send(this.txt4.Text);
            SendKeys.Send("{ENTER}");
        }

        if (txt5.Text != string.Empty)
        {
            SendKeys.Send(this.txt5.Text);
            SendKeys.Send("{ENTER}");
        }
    }

当我使用 时timer.Interval = 5000,我的应用程序每 5 秒发送所有文本框的每个值,但我希望每个文本框之间有 5 秒的延迟。

这可能吗?我不想使用System thread sleep,因为应用程序将冻结..

4

3 回答 3

1

做一个全局变量

int time = 0;

那么你的代码可以是......

private void Timer_Tick(object sender, EventArgs e)
{
    switch (time%5)
        {
            case 0:
                if (txt1.Text != string.Empty)
                    SendKeys.Send(this.txt1.Text);
                break;

            case 1:
                if (txt2.Text != string.Empty) 
                    SendKeys.Send(this.txt2.Text);
                break;

            //finish the switch
        }

        SendKeys.Send("{ENTER}");
        time++;
    }
}

你甚至可以使用

this.Controls.Find("txt"+(time%5 + 1))
于 2013-08-13T15:29:06.830 回答
0

使用 5 个不同的计时器,每个计时器 1 个或上面的答案。

于 2013-08-13T15:30:27.197 回答
0

开始将所有文本框放入一个集合中:

private List<Textbox> textboxes = new List<Textbox>(){txt1, txt2, txt3};

有一个变量来跟踪下一个要显示的文本框:

private int nextTextBox = 0;

现在把它们放在一起:

private void Timer_Tick(object sender, EventArgs e)
{
    var textbox = textboxes[nextTextBox];
    nextTextBox = (nextTextBox + 1) % textboxes.Count; //you can put this inside the if if that's what you want
    if (!string.IsNullOrEmpty(textbox.Text))
    {
        SendKeys.Send(textbox.Text);
        SendKeys.Send("{ENTER}");
    }
}
于 2013-08-13T15:42:36.180 回答