FormStartPosition.CenterParent не работает - PullRequest
30 голосов
/ 20 декабря 2011

В следующем коде у меня работает только второй метод (.NET 4.0).FormStartPosition.CenterParent не центрирует дочернюю форму над ее родителем.Почему?

Источник: этот ТАК вопрос

using System;
using System.Drawing;
using System.Windows.Forms;

class Program
{
  private static Form f1;

  public static void Main()
  {
    f1 = new Form() { Width = 640, Height = 480 };
    f1.MouseClick += f1_MouseClick; 
    Application.Run(f1);
  }

  static void f1_MouseClick(object sender, MouseEventArgs e)
  {
    Form f2 = new Form() { Width = 400, Height = 300 };
    switch (e.Button)
    {
      case MouseButtons.Left:
      {
        // 1st method
        f2.StartPosition = FormStartPosition.CenterParent;
        break;
      }
      case MouseButtons.Right:
      {
        // 2nd method
        f2.StartPosition = FormStartPosition.Manual;
        f2.Location = new Point(
          f1.Location.X + (f1.Width - f2.Width) / 2, 
          f1.Location.Y + (f1.Height - f2.Height) / 2
        );
        break;
      }
    }
    f2.Show(f1); 
  }
}

Ответы [ 12 ]

0 голосов
/ 15 января 2019

Старый вопрос, я знаю, но у меня была та же проблема, но по другой причине.

Открываемая форма имела переопределенный метод OnLoad:

protected override void OnLoad(EventArgs e)
{
   //... etc.
}

, но былне вызывая базовую реализацию , как это должно быть :

protected override void OnLoad(EventArgs e)
{
   //... etc.
   base.OnLoad(e);
}

При переопределении OnLoad (EventArgs) в производном классе, обязательно вызовите OnLoad базового класса (EventArgs)метод, чтобы зарегистрированные делегаты получили событие.

0 голосов
/ 14 декабря 2016

Небольшое изменение к ответу Джелтона

Form2_Load(object sender, EventArgs e)
{
    if (Owner != null && Parent == null && StartPosition == FormStartPosition.CenterParent)
    Location = new Point(Owner.Location.X + Owner.Width / 2 - Width / 2,
        Owner.Location.Y + Owner.Height / 2 - Height / 2);
}
...