Способ отслеживания изменения местоположения элемента управления на экране?

Есть ли способ с помощью WinForms быть предупрежденным об изменении местоположения элемента управления относительно экрана?

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

В этом упрощенном случае быстрое Ответ - отслеживать события формы LocationChanged и SizeChanged, но может быть произвольное количество уровней вложенности, поэтому мониторинг этих событий для каждого родителя вверх по цепочке до первичной формы невозможен. Использование таймера для проверки того, изменилось ли местоположение, тоже похоже на обман (в плохом смысле).

Краткая версия: Учитывая только произвольный объект Control, есть ли способ узнать, когда местоположение этого Control изменяется на экране, без знания родительской иерархии элемента управления?

Иллюстрация, по запросу:

Illustration

Обратите внимание, что эта концепция «закрепления» является существующей возможностью, но в настоящее время требует знания родительской формы и того, как ведет себя дочерний элемент управления; это не та проблема, которую я пытаюсь решить. Я хотел бы инкапсулировать эту логику отслеживания элементов управления в абстрактную форму, от которой могут наследоваться «закрепляемые» формы.Есть ли какая-то магия перекачки сообщений, которую я могу использовать, чтобы узнать, когда элемент управления перемещается по экрану, без необходимости иметь дело со всем сложным отслеживанием родителей?

7
задан roken 16 November 2011 в 14:47
поделиться