Если вы позвоните Thread.Sleep
, это приведет к зависанию вашего потока графического интерфейса.
То, что я хотел бы сделать, это использовать System.Windows.Forms.Timer
, и каждый Tick
, указывать следующий символ.
public partial class Form1 : Form
{
Timer timer;
string str;
int char_num;
public Form1()
{
InitializeComponent();
timer = new Timer();
timer.Tick += timer_Tick;
}
void timer_Tick(object sender, EventArgs e)
{
SendKeys.Send(str.Substring(char_num++, 1));
if (char_num == str.Length)
timer.Stop();
}
private void button1_Click(object sender, EventArgs e)
{
textBox1.Focus();
str = "Jonathon";
char_num = 0;
timer.Interval = 1000;
timer.Start();
}
}
Примечание. Если это не очевидно, для этого кода требуется форма с textBox1
и кнопкой, для которой событие Click
связано с button1_Click()
.
Если вы хотите, чтобы первый символ был отправлен сразу, вы можете «обмануть», вызвав обработчик Tick
сразу после запуска таймера, добавив следующую строку:
timer_Tick(null, EventArgs.Empty);