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