2009-11-16 1 views
1

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

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

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

Я перегрузил 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).

Edit 2

Вот некоторые фотографии, чтобы показать эффект.

дизайнер:

Designer http://www.free.nodespot.com/designer.jpg

выполнения: Runtime http://www.free.nodespot.com/runtime.jpg

+0

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

+0

Существует список событий, которые были запущены в классе формы по адресу http://stackoverflow.com/questions/1575508/in-what-order-do-net-windows-forms-events-fire/1575573#1575573. Может быть, это поможет справиться с проблемой. – Patrik

+0

Вы также можете пойти наоборот: используйте WndProc, чтобы определить, когда размер изменен (после выполнения base.WndProc). –

ответ

1

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

Смежные вопросы