Схоже, існує плутанина між "Батьком" та "Власником". Якщо ви відкриваєте форму як MDI-форму, тобто вкладену всередину іншої форми, тоді ця оточуюча форма є батьківською. Властивість форми StartPosition зі значенням FormStartPosition.CenterParent посилається на це. Параметр, який ви можете передати методу Show, є власником, а не батьком! Ось чому frm.StartPosition = FormStartPosition.CenterParent не працює, як ви могли очікувати.
Наступний код, розміщений у формі, відцентрує його по відношенню до власника з деяким зміщенням, якщо для його StartPosition встановлено значення Manual. Невеликий зсув відкриває форми плитковим способом. Це перевага, якщо власник і форма, що належать, мають однаковий розмір або якщо ви відкриваєте кілька форм, що належать.
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
if (Owner != null && StartPosition == FormStartPosition.Manual) {
int offset = Owner.OwnedForms.Length * 38;
Point p = new Point(Owner.Left + Owner.Width / 2 - Width / 2 + offset, Owner.Top + Owner.Height / 2 - Height / 2 + offset);
this.Location = p;
}
}