Я понимаю, что это старый вопрос, но недавно у меня возникла та же проблема, и по причинам, к которым я не буду обращаться, я не хотел использовать метод form.ShowDialog (), и мое приложение не было MDI приложения, поэтому метод CenterParent не оказал никакого влияния. Вот как я решил проблему, вычислив координаты для формы, которую я хотел центрировать, и вызвав новое местоположение в событии LocationChanged главной формы. Надеемся, что это поможет кому-то еще, имеющему эту проблему.
В приведенном ниже примере родительская форма называется MainForm, а форма, которую я хочу центрировать в MainForm, называется pleaseWaitForm.
private void MainForm_LocationChanged(object sender, EventArgs e)
{
Point mainFormCoords = this.Location;
int mainFormWidth = this.Size.Width;
int mainFormHeight = this.Size.Height;
Point mainFormCenter = new Point();
mainFormCenter.X = mainFormCoords.X + (mainFormWidth / 2);
mainFormCenter.Y = mainFormCoords.Y + (mainFormHeight / 2);
Point waitFormLocation = new Point();
waitFormLocation.X = mainFormCenter.X - (pleaseWaitForm.Width / 2);
waitFormLocation.Y = mainFormCenter.Y - (pleaseWaitForm.Height / 2);
pleaseWaitForm.StartPosition = FormStartPosition.Manual;
pleaseWaitForm.Location = waitFormLocation;
}
Если у вас есть родительская форма с изменяемым размером, и вы хотите, чтобы ваша подформа также центрировалась при изменении размера главной формы, теоретически вы должны иметь возможность поместить этот код в метод, а затем вызвать метод в обеих События LocationChanged и SizeChanged.