Размер формы изменяется между выходом конструктора и началом загрузки C # - PullRequest
1 голос
/ 16 ноября 2009

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

    var createUser = new FrmCreateUser();
    createUser.ShowDialog();

Где-то между выходом конструктора и срабатыванием события load размер изменяется.

Я перегружен WndProc в «родительской» форме, хотя он просто относится к базовой реализации, поэтому мне трудно поверить, что это причина.

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == (int)WindowsMessages.WM_SYSCOMMAND)
        {

            if (m.WParam.ToInt32() == (int)WindowsMessages.SC_MINIMIZE)
            {
                foreach (Form f in Application.OpenForms)
                    if (f != this)
                        f.Hide();

            }
            else if (m.WParam.ToInt32() == (int)WindowsMessages.SC_RESTORE)
            {
                foreach (Form f in Application.OpenForms)
                    if (f != this && f.GetType() != typeof (Controls.DockLocation) )
                        f.Show();
            }
        }

        base.WndProc(ref m);
    }

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

    private void FrmCreateUser_Load(object sender, EventArgs e)
    {
        Size = new Size(RestoreBounds.Width, RestoreBounds.Height);
    }

Если кто-нибудь сможет пролить свет на это, это будет очень ценно.


Редактировать

Удаление переопределения WndProc не имеет никакого эффекта.

SizeChanged вызывается только один раз (внутри вызова createUser.ShowDialog()), что происходит до вызова OnHandleCreated(EventArgs e).

Редактировать 2

Вот несколько картинок, демонстрирующих эффект.

Дизайнер:

Дизайнер http://www.free.nodespot.com/designer.jpg

время работы: Время выполнения http://www.free.nodespot.com/runtime.jpg

1 Ответ

1 голос
/ 17 ноября 2009

Я нашел это - во многом благодаря счастливой случайности того, что PropertyGrid позиционирует себя как что-либо еще. StartPosition было установлено на WindowsDefaulBounds вместо значения по умолчанию WindowsDefaultLocation.

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