Как реализовать запуск и остановку таймера при каждой активации события мыши?

У меня есть таймер, а так же кнопка и событие мыши. При каждом событии "тик" таймера, генерируются два рандомных целочисленных значения. Но таймер не запускается при наведении курсора. Задача для таймера такова: он должен сгенерировать значения с определенной задержкой(int ed) при наведении курсора на кнопку. Т.е я думаю, что таймер должен запускаться после каждого использования события мыши, генерировать значение и передавать его в randPosX и randPosY, а потом отключаться. Но таймер не включается. Как это написать грамотно? Код события мыши:

private void button1_MouseMove(object sender, MouseEventArgs e)
        {

            int ed = 100;
            timer1.Interval = ed;
            timer1.Start();
            button1.Location = new Point(randPosX, randPosY);
            timer1.Stop();

        }

код события таймера:

private void timer1_Tick(object sender, EventArgs e)
        {

            Random rand = new Random();
            randPosX = rand.Next(340);
            randPosY = rand.Next(340);

        }

Ответы (2 шт):

Автор решения: aepot

А зачем вам здесь вообще таймер, кнопка должна начать беситься после первого наведения или просто убегать при каждом наведении?

private readonly Random rand = new Random();
private bool caught;

private void button1_MouseMove(object sender, MouseEventArgs e)
{
    if (!caught) // если юзер уже поймал кнопку, не запускать таймер
        timer1.Enabled = true;
}

private void button1_Click(object sender, EventArgs e)
{
    caught = true;
    timer1.Enabled = false;
}

private void timer1_Tick(object sender, EventArgs e)
{
    button1.Location = new Point(rand.Next(340), rand.Next(340));
}
→ Ссылка
Автор решения: tym32167

Можно проще и без таймера

public class MyForm : Form
{
    private Button _myButton;
    private Random _myRandom = new Random();

    public MyForm()
    {
        this.Width = 600;
        this.Height = 600;

        _myButton = new Button() { Text = "Hover me", Width = 140, Height = 60, Location = new Point(0, 0) };
        this.Controls.Add(_myButton);

        _myButton.MouseEnter += button_mouse_enter;
    }

    bool locked = false;
    private async void button_mouse_enter(object sender, EventArgs args)
    {
        if (locked) return;
        locked = true;
        await Task.Delay(1000);
        _myButton.Location = new Point(_myRandom.Next(500), _myRandom.Next(500));
        locked = false;
    }   
}

Результат

...

→ Ссылка