С WinForms, есть ли способ оповещения об изменении местоположения элемента управления относительно экрана?
Скажем, у вас есть Форма с кнопкой на ней, и вы хотели бы знать, когда кнопка перемещается из ее текущего местоположения в пикселях на экране. Если кнопка перемещена в другое место в ее родительской форме, вы, очевидно, можете использовать событие LocationChanged, но если форма перемещается пользователем, как вы узнаете, что кнопка визуально переместилась?
В этом упрощенном случае быстрый ответ состоит в том, чтобы отслеживать события FormChanged и SizeChanged формы, но может быть произвольное количество уровней вложенности, поэтому мониторинг этих событий для каждого родителя вверх по цепочке к первичной форме невозможен. Использование таймера для проверки изменения местоположения также выглядит как мошенничество (нехорошо).
Короткая версия:
Учитывая только произвольный объект Control, есть ли способ узнать, когда местоположение этого Control изменяется на экране, без знания родительской иерархии элемента управления?
Иллюстрация по заказу:
Обратите внимание, что эта концепция "закрепления" является существующей возможностью, но в настоящее время она требует знания родительской формы и поведения дочернего элемента управления; это не проблема, которую я пытаюсь решить. Я хотел бы заключить эту логику отслеживания элемента управления в абстрактную форму, от которой могут наследовать «способные к выводу» формы. Есть ли какая-то магия прокачки сообщений, которую я могу использовать, чтобы узнать, когда элемент управления перемещается на экране, не имея дело со всеми сложными родительскими слежками?