Показать дочернюю форму в центре родительской формы в C # - PullRequest
68 голосов
/ 03 июня 2009

Я создаю новую форму и вызываю из родительской формы следующим образом:

loginForm = new SubLogin();   
loginForm.Show();

Мне нужно отобразить дочернюю форму в центре родителя. Итак, при загрузке дочерней формы я делаю следующее: `

Point p = new Point(this.ParentForm.Width / 2 - this.Width / 2, this.ParentForm.Height / 2 - this.Height / 2);
this.Location = p;

Но это выдает ошибку, так как родительская форма пуста. Я также попытался установить свойство Parent, но это не помогло. Любые входы по этому поводу?

Ответы [ 16 ]

0 голосов
/ 15 ноября 2018

Если какая-либо форма окна (дочерняя форма) была открыта из нового потока Главного окна (родительская форма), то невозможно удерживать подокно в центре главного окна, поэтому нам нужно зафиксировать положение подокна окно вручную с помощью координат X и Y.

В свойствах подокна измените «StartPosition» на «Manual»

код в главном окне

private void SomeFunction()
{
    Thread m_Thread = new Thread(LoadingUIForm);
    m_Thread.Start();
    OtherParallelFunction();
    m_Thread.Abort();
}

private void LoadingUIForm()
{
    m_LoadingWindow = new LoadingForm(this);
    m_LoadingWindow.ShowDialog();
}

код в подокне для определения собственной позиции с помощью родительской текущей позиции, а также размера

public LoadingForm(Control m_Parent)
{
   InitializeComponent();
   this.Location = new Point( m_Parent.Location.X+(m_Parent.Size.Width/2)-(this.Size.Width/2),
                              m_Parent.Location.Y+(m_Parent.Size.Height/2)-(this.Size.Height/2)
                            );
}

Здесь вычисляются координаты центра родителя, а подокно сохраняется точно в центре родителя путем вычисления его собственного центра с помощью (this.height / 2) и (this.width / 2) this Эта функция может быть использована для родительских перемещенных событий.

0 голосов
/ 05 июня 2017

Вы можете установить StartPosition в конструкторе дочерней формы так, чтобы все новые экземпляры формы центрировались по отношению к ее родителю:

public MyForm()
{
    InitializeComponent();

    this.StartPosition = FormStartPosition.CenterParent;
}

Конечно, вы также можете установить свойство StartPosition в свойствах Designer для вашей дочерней формы. Если вы хотите отобразить дочернюю форму как модальное диалоговое окно, просто установите владельца окна в параметре для метода ShowDialog:

private void buttonShowMyForm_Click(object sender, EventArgs e)
{
    MyForm form = new MyForm();
    form.ShowDialog(this);
}
0 голосов
/ 15 сентября 2015

Если вам нужно отцентрировать свою childForm от childForm, тогда код будет примерно таким. Этот код находится в childForm.cs

this.Show(parent as Form);    // I received the parent object as Object type
this.CenterToParent();
0 голосов
/ 08 октября 2014

Создайте форму Windows, затем укажите для нее параметр: CenterParent, затем используйте этот код:

yourChildFormName x = new yourChildFormName();
x.ShowDialog();
0 голосов
/ 02 октября 2012

Почему бы не использовать это?

LoginForm.WindowStartupLocation = Windows.WindowStartupLocation.CenterOwner 

(vb.net)

0 голосов
/ 03 июня 2009

Вероятно, родитель еще не установлен, когда вы пытаетесь получить к нему доступ.

Попробуйте это:

loginForm = new SubLogin();
loginForm.Show(this);
loginForm.CenterToParent()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...