Есть ли какие-либо события в C#, которые срабатывают при перемещении формы STOPS. Не во время его движения.C# Form Move Stopped Event
Если для этого события нет событий, есть ли способ сделать это с помощью WndProc?
Есть ли какие-либо события в C#, которые срабатывают при перемещении формы STOPS. Не во время его движения.C# Form Move Stopped Event
Если для этого события нет событий, есть ли способ сделать это с помощью WndProc?
Событие ResizeEnd срабатывает после завершения хода. Возможно, вы можете это использовать.
Просто установите флаг в true при запуске событий onmove. Если происходит событие mouseup и флаг имеет значение true, форма перестает перемещаться.
Я признаю, что это, вероятно, не будет работать в случае, если пользователь перемещает форму с клавиатуры, но это довольно редко.
событие MouseUp очень вряд ли уволят поскольку перемещение формы обычно выполняется с использованием строки заголовка, а события мыши не поднимаются для операций мыши в этой области. –
Событие mouseup не срабатывает, если вы перемещаете форму из строки заголовка – Ozzy
Это не отказоустойчивое решение, но оно чистое .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.
Для тех, кто придет сюда и хочет узнать немного больше о последней части этого ответа (определение, когда мышь нажата и отпущена во время перемещения), проверьте мой вопрос, который вникает немного больше в это http://stackoverflow.com/questions/24493167/wm-nclbuttonup-message-not-sent-at-the-end-of-dragging-a-form-how-to-do -so – AnotherUser
У меня была такая же проблема с пользовательским элементом управления, но у него нет события ResizeEnd. Решением, которое работало, является переопределение метода WndProc и прослушивание EXITSIZEMOVE.
См примера here
Я испытал ResizeChanged события, и она отлично работает, но я не знаю, соотношение между движением и размером, но это работает для меня
Я понятия не имел об этом. Просто проверено, это работает! Спасибо –
+1 - Я, очевидно, потратил слишком много времени на веб-приложения. –
Ха-ха, хороший. Отлично работает. – Ozzy