It's not completely clear what you mean with a form opens inside of MainForm(Form1). If you are adding your Form to Form1's Controls, you can use the ControlAdded event of Form1 with something like this:
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;
}
If yours is an Mdi app, you could use the MdiChildActivate event, instead.
EDIT:
Of course this approach will work only IF you add the inner forms to the main form's controls.
Anyway, I don't think that the way an application is designed should be driven by "I don't want to change 37 methods" and looking for tricks and workarounds. To me the better and cleaner solution in this case would be to avoid subclassing, events and whatever and simply implement a new method like this one in your main form:
private void PrepareAndShow(Form aForm)
{
aForm.BackColor = Color.Blue;
// here you can add (even in the future) all the preprocessing you want
aForm.Show();
}
Then you will of course have to modify all the methods for the menu items calling it:
Form aFrm = new Form2();
this.PrepareAndShow(aFrm); // instead of aFrm.Show();
In this way you have to modify 37 methods (less than 10 minutes work, I guess), but keep your application clean, open to future changes and extensions. Everything else can be fun, and interesting to experiment with, but I would not use it in production code.