2009-05-31 3 views
4

Есть ли какие-либо события в C#, которые срабатывают при перемещении формы STOPS. Не во время его движения.C# Form Move Stopped Event

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

ответ

12

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

+0

Я понятия не имел об этом. Просто проверено, это работает! Спасибо –

+0

+1 - Я, очевидно, потратил слишком много времени на веб-приложения. –

+0

Ха-ха, хороший. Отлично работает. – Ozzy

0

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

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

+1

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

+0

Событие mouseup не срабатывает, если вы перемещаете форму из строки заголовка – Ozzy

2

Это не отказоустойчивое решение, но оно чистое .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"; 
} 

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

+0

Для тех, кто придет сюда и хочет узнать немного больше о последней части этого ответа (определение, когда мышь нажата и отпущена во время перемещения), проверьте мой вопрос, который вникает немного больше в это http://stackoverflow.com/questions/24493167/wm-nclbuttonup-message-not-sent-at-the-end-of-dragging-a-form-how-to-do -so – AnotherUser

0

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

См примера here

0

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