Rozwiązałem to w ten sposób.
private void timer1_Tick(object sender, EventArgs e)
{
int a = Convert.ToInt16(numericUpDown1.Text);
for (int i = 0; i < a; i++)
{
SendKeys.Send(textBox1.Text);
SendKeys.Send("{ENTER}");
timer1.Interval = Convert.ToInt16(textBox2.Text);
Thread.Sleep(timer1.Interval);
}
timer1.Enabled = false;
}
Kombinujesz, kombinujesz i dalej brniesz w jakąś skomplikowaną idee, a sprawa jest bardzo prosta, zamiast klepać kod bez namysłu powinieneś usiąść i zastanowić się co chcesz zrobić.
Wyłączenie zegara za każdym tyknięciem?
timer1.Enabled = false;
A to?
timer1.Interval = Convert.ToInt16(textBox2.Text);
Thread.Sleep(timer1.Interval);
Po co przypisywać Property, z któego nie korzystasz?, może lepiej po prostu:
Thread.Sleep(Convert.ToInt16(textBox2.Text));
Skoro już korzystasz z Thread.Sleep to odpuść timer, możesz przecież wartość przekazać dowolną zmienna, nie twórz obiektu timer bo z niego i tak nie korzystasz.
Podsumowując wydaje mi się, że wszystko co potrzebujesz to po wciśnięciu F7 jednorazowe wywołanie metody (w zasadzie to się właśnie dzieje, tylko przez zdarzenie timer.Tick i kod się zrobił lekko śmieszny). Do metody potrzebujesz przekazać twoją wiadomość, która ma być przepisana i interwał z jakim mają być wpisywane kolejne znaki.
public void SendKeysWithInterval(string message)
{
foreach (var c in message)
{
//Wpisanie kolejnego znaku z wiadomości przekazanej jako parametr,
Thread.Sleep(/* aktualna wartość interwału pomiędzy znakami, przekazywana bokiem, np: Convert.ToInt16(textBox2.Text)*/);
}
//Wciśnięcie entera, wyjście z metody: SendKeys.Send("{ENTER}");
}