WinFormsでは、画面に対してコントロールを変更するコントロールに警告する方法はありますか?コントロールの画面の場所が変更されたときを監視する方法はありますか?
ボタンが付いたフォームがあり、ボタンが画面上の現在のピクセル位置から移動したときを知りたいとします。ボタンが親フォームの別の場所に移動された場合は、明らかにLocationChangedイベントを使用できますが、フォームがユーザーによって移動された場合、ボタンが視覚的に移動したことをどのように知ることができますか?
この単純なケースでは、フォームのLocationChangedイベントとSizeChangedイベントを監視するのがクイックアンサーですが、任意の数のネスティングレベルが存在する可能性があります。場所が変更されたかどうかを確認するためにタイマーを使用すると、悪い方法で不正行為のように思えます。
ショートバージョン: のみ、任意のコントロールオブジェクトを指定して、画面上のときのコントロールの位置の変化を知るための方法は、コントロールの親階層の知識がなくても、あるのでしょうか?
要求によってイラスト、この「ピン留め」という概念は、既存の機能があるが、それは現在、親フォームとどのように子コントロールの振る舞いの知識が必要であることを
注意。これは私が解決しようとしている問題ではありません。私は、このコントロール追跡ロジックを抽象的なFormにカプセル化したいと思います。複雑な親トラッキングをすべて処理することなく、コントロールが画面上を移動するときを知るために利用できるメッセージポンプの魔法がありますか?
はなぜすべての親に現実的ではない上のウィンドウにすべての方法を監視していませんか? –
20レベルのネスティングがあり、すべてがFillにドッキングされているとします。ボーダーをドラッグしてメインフォームのサイズを変更すると、SizeChangedイベントはドラッグの途中で何度もトリガーされます。それは冗長なイベントのトンです。第2に、これらのコントロールは場所(完全に異なる入れ子構造の階層)に移動する可能性があるため、各親に対してParentChangedをフックしても、親コントロールのすべてを保存せずに元の親からSizeChanged/LocationChangedを外してはいけませんトラバースするときの情報それはすべて非常に汚れているようです。 – roken
これは、「あなたは何をしようとしていますか? –