Отображение второй формы точно на месте первой формы - PullRequest
3 голосов
/ 05 января 2011

Из основной формы (Форма 1) Я звоню, чтобы показать другую форму (Форма 2).но я хочу, чтобы он показывал точно то же место и размер, что и form1, так что мы не сможем больше видеть form1, пока не закроем form2 или не переместим его куда-нибудь еще.поэтому я написал эти строки:

        Form2 f2 = new Form2();
        f2.Left = this.Left;
        f2.Top = this.Top;
        f2.Size = this.Size;
        f2.Show();

Но у него все еще есть проблемы.form2 нас не совсем на form1.что-нибудь еще, что я должен добавить к коду?

Ответы [ 5 ]

3 голосов
/ 05 января 2011

Да, вы делаете это неправильно.Фактический размер формы будет таким же, как и размер дизайна, если на компьютере, на котором вы ее запускаете, есть точные те же пользовательские настройки, размер системного шрифта и настройка DPI для видео.Если он много, то настройка DPI отличается.Если он немного выключен, то пользовательские настройки отличаются.Как больший шрифт заголовка или большие кнопки.Исправление:

    Form2 f2 = new Form2();
    f2.Show();
    f2.Left = this.Left;
    f2.Top = this.Top;
    f2.Size = this.Size;

Если это слишком заметно, вы должны позволить событию Load Form2 сделать это.Передайте ссылку на основную форму или используйте свойство Владелец и Показать (владелец).Другими словами:

    Form2 f2 = new Form2();
    f2.Show(this);

в форме 2:

    protected override void OnLoad(EventArgs e) {
        base.OnLoad(e);
        this.Location = Owner.Location;
        this.Size = Owner.Size;
    }
1 голос
/ 19 сентября 2013

попробуйте это ...

Form2 f2 = new Form2();
f2.Show();
f2.SetBounds(this.Location.X, this.Location.Y,this.Width, this.Height);
//this.Hide();      // if you want to hide 1stform after showing 2nd form
1 голос
/ 05 января 2011

Что произойдет, когда форма Form2 будет отображаться в том же размере и в тех же местах, что и форма Form1?Form1 будет невидимым, верно?Итак, почему вы не используете form1.Hide();?

1 голос
/ 05 января 2011

Если вы не хотите, чтобы пользователь взаимодействовал с Form1 до тех пор, пока Form2 не закроется, измените свою последнюю строку на

f2.ShowDialog();

Тогда не имеет значения, может ли пользователь по-прежнему видеть форму Form1. Windows не позволит Form1 снова получить фокус, пока Form2 не закроется.

0 голосов
/ 18 июля 2014

В свойствах формы для form2 установите для нее значение "center on parent"

Если формы одинакового размера, то форма2 будет помещена поверх формы1, а форма 1 недоступна. По-прежнему открывайте форму, используя модал (form2.ShowDialog ()), поэтому фокус остается на form2, даже если пользователь перемещает форму два вручную.

Вы по-прежнему сможете перемещать форму2, как я только что упомянул, из формы один, но это не было указано в рамках этого вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...