ボタンコントロールをラップした独自コントロールに、操作ログ出力機能を盛り込む作業を実施中。ログには「どの画面での処理か」を記述する、という要件なのだが、これを実現するのに業務ロジック側から名前を指定してもらうのは回避したい。
ということで、Parentプロパティを参照して、親フォームを手繰っていく処理を書いている。
ここで、ちょっと気になったのがタブコントロール。VB6.0のTabとは異なり、.NETのタブは外枠だけ。中にはTabPageコントロール(パネル状のコントロール)が貼り付けられ、コントロールはその上で動く。
従って、貼り付けられたボタンなどに取っての直接の親は「TabPage」になる。ここからフォームまでたどるには、さらに再帰呼び出しなどで親を手繰っていく必要がある。