В дочерних формах обработайте событие FormResize примерно так:
private void Form1_Resize(object sender, EventArgs e)
{
Size pSize = this.ParentForm.ClientSize;
Size maxAllowed = new Size(pSize.Width - this.Left, pSize.Height - this.Top);
// Resize the child if it goes out of bounds
if (this.Height > maxAllowed.Height)
this.Height = maxAllowed.Height;
if (this.Width > maxAllowed.Width)
this.Width = maxAllowed.Width;
}
вероятно, не очень хорошие результаты в зависимости от того, что вы хотите.
Я бы, вероятно, переделал его так, чтобы он переместился обратно в границы вместо изменения его размера.