带有5个文本框c#的定时器延迟
本文关键字:定时器 延迟 5个 文本 带有 | 更新日期: 2023-09-27 18:27:41
我想创建一个类似自动打字机的东西。
我有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
,因为应用程序将被冻结。。
生成全局变量
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))
使用5个不同的计时器,每个计时器1个或以上答案。
开始将所有文本框放入集合:
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}");
}
}