Не совсем понятно, что вы имеете в виду, когда форма открывается внутри MainForm (Form1) . Если вы добавляете форму в элементы управления Form1, вы можете использовать событие ControlAdded формы Form1 примерно так:
this.ControlAdded += new System.Windows.Forms.ControlEventHandler(this.Control_Added);
private void Control_Added(object sender, System.Windows.Forms.ControlEventArgs e)
{
if (e.Control is Form)
((Form)e.Control.BackColor = Color.Blue;
}
Если у вас приложение Mdi, вы можете использовать вместо него событие MdiChildActivate.
EDIT:
Конечно, этот подход будет работать, только если вы добавите внутренние формы к элементам управления главной формы.
В любом случае, я не думаю, что то, как разрабатывается приложение, должно основываться на «я не хочу менять 37 методов» и искать хитрости и обходные пути. Для меня лучшее и более чистое решение в этом случае состояло бы в том, чтобы избежать подклассов, событий и чего-либо еще и просто внедрить новый метод, подобный этому, в вашей основной форме:
private void PrepareAndShow(Form aForm)
{
aForm.BackColor = Color.Blue;
// here you can add (even in the future) all the preprocessing you want
aForm.Show();
}
Тогда вам, конечно, придется изменить все методы для пунктов меню, вызывающих его:
Form aFrm = new Form2();
this.PrepareAndShow(aFrm); // instead of aFrm.Show();
Таким образом, вы должны изменить 37 методов (думаю, менее 10 минут работы), но держать свое приложение в чистоте, открытым для будущих изменений и расширений. Все остальное может быть веселым и интересным для экспериментов, но я бы не стал использовать это в рабочем коде.