C # Form Move Stopped Event - PullRequest
       38

C # Form Move Stopped Event

4 голосов
/ 01 июня 2009

Есть ли какое-либо событие в C #, которое срабатывает при перемещении формы ОСТАНОВКИ. Не во время движения.

Если для него нет события, есть ли способ сделать это с WndProc?

Ответы [ 5 ]

13 голосов
/ 01 июня 2009

Событие ResizeEnd возникает после окончания хода. Возможно, вы могли бы использовать это.

2 голосов
/ 01 июня 2009

Это не отказоустойчивое решение, но это чистый .NET, и он очень прост. Добавьте таймер в вашу форму, установите его на относительно короткую задержку (100-150 мс показались мне нормальными). Добавьте следующий код для событий Form.LocationChanged и Timer.Tick:

private void Form_LocationChanged(object sender, EventArgs e)
{
    if (this.Text != "Moving")
    {
        this.Text = "Moving";
    }
    tmrStoppedMoving.Start();
}

private void Timer_Tick(object sender, EventArgs e)
{
    tmrStoppedMoving.Start();
    this.Text = "Stopped";
}

Если вам нужна более точная обработка (точно зная, когда кнопка мыши отпущена в строке заголовка и т. Д.), Вам, вероятно, придется погрузиться в сообщения окон мониторинга.

0 голосов
/ 16 июня 2016

Я протестировал событие ResizeChanged, и оно отлично работает, однако я не знаю связи между перемещением и изменением размера, но оно работает для меня

0 голосов
/ 27 сентября 2010

У меня была такая же проблема с пользовательским элементом управления, но у него нет события ResizeEnd. Решение, которое сработало, заключается в переопределении метода WndProc и прослушивании EXITSIZEMOVE.

См. Пример здесь

0 голосов
/ 01 июня 2009

Просто установите флаг в true, когда запускаются события onmove. Если происходит событие mouseup и флаг имеет значение true, форма перестает перемещаться.

Я допускаю, что это, вероятно, не будет работать в случае, когда пользователь перемещает форму с помощью клавиатуры, но это довольно редко.

...