私は、任意の数の子を含むことができるという点でパネルのように機能するWindowsフォームのカスタムコントロールを持っています。子コントロールの数とタイプは実行時に決定されるため、存在する可能性のある子コントロールがないかどうかわからずに一般的な方法で作業する必要があります。子コントロールがWinFormsでフォーカスを取得または紛失したときの追跡方法は?
パネルにフォーカスがあるかどうかによって、パネルの背景色を変更したいと思います。したがって、パネルの子(またはパネルなどの子の子)がフォーカスを取る場合、これを知りたいので、カスタムパネルの背景色を更新できます。フォーカスが子階層にないものに移動すると、元の背景色に戻すことができるように知る必要があります。
Control.ContainsFocusは、パネルに子階層のフォーカスが含まれているかどうかを教えてもらえますが、変更がいつあるかを知る必要があります。現時点では、私は次のような貧弱なメカニズムしか考え出すことができません。
私は各子供の各子供と各子供のGotFocus/LostFocusにフックします。私はControlAdded/ControlRemovedをフックして、可能な変更可能な子供のヒアナリーと同期しておく必要があります。ご覧のとおり、これは多くのイベントフックで終わる可能性があり、より簡単なアプローチが必要だと思われます。何か案は?