Место Winforms

У меня есть приложение с 2 forms, главное окно и второй Form.

Я хочу открыть второй Form на button click, и его местоположение должно быть рядом с основной формой (поэтому, если основная форма 600px wide, X нового Form будет main.X + 600)

Попробовал это, но, похоже, он не появляется, он открывается поверх основной формы:

private void button1_Click(object sender, EventArgs e)
{
    var form = new SecondForm();
    var main = this.Location;
    form.Location = new Point((main.X + 600), main.Y);
    form.Show(); 
}

Является Location не правильным атрибутом?

Ответ 1

Установите форму StartPosition на FormStartPosition.Manual. Вы можете сделать это в конструкторе или из конструктора:

StartPosition = FormStartPosition.Manual;

Ответ 2

Очевидно, вы не рассчитывали на свойство StartPosition. Однако изменение его в ручном режиме не является правильным исправлением, вторая форма, которую вы загружаете, может перемасштабировать себя на другой машине с другой настройкой DPI видео. Очень часто в эти дни. Это, в свою очередь, может изменить его свойство Location.

Правильным способом является ожидание запуска события "Загрузить", перемасштабирование выполняется к тому времени, и окно еще не видно. Это лучшее время, чтобы переместить его в нужное место. StartPosition больше не имеет значения. Вот так:

        var frm = new SecondForm();
        frm.Load += delegate {
            frm.Location = new Point(this.Right, this.Top);
        };
        frm.Show();

Ответ 3

Location - это свойство права, но вы должны установить

Form.StartPosition = FormStartPosition.Manual;

тоже.