У меня проблема с WinForms (VB.NET).
Главное окно - это контейнер MDI.
Пользователь открывает новое дочернее окно:
, а затем максимизирует его, поэтому окно правильно заполняет клиентскую область. Мои элементы управления правильно привязаны (со свойством IDE Anchor) к сторонам окна, поэтому расширение окна всегда хорошо заполняет клиентскую область:
В этом состоянии (клиентские окна развернуты) пользователь открывает другое или новое дочернее окно, но новые элементы управления окна не растягиваются, то есть они не «понимают», что должны растягиваться!
Это особенно раздражает, потому что если пользователь пытается восстановить окно, то элементы управления растягиваются, поэтому они исчезают (смотрите, что больше нет списка)!
Это ошибка? Как я могу решить это?
edit: согласно комментарию Ганса Пассанта, я создал новый простой проект, и он работал как надо. Поэтому я исследовал, чтобы увидеть, что отличалось от моего реального проекта и образца. Разница в том, что в моем проекте я создаю формы динамически.
Я динамически создаю много кнопок на панели инструментов. Когда пользователь нажимает кнопку, это исполняемый код:
Private Sub buttonClicked(ByVal sender As System.Object, ByVal e As System.EventArgs)
Cursor.Current = Cursors.WaitCursor
Dim b As Button = CType(sender, Button)
Dim assem As Assembly = Assembly.GetExecutingAssembly()
Dim formType As Type = assem.GetType(CStr(b.Tag))
Dim exFormAsObj As Object = Nothing
Try
exFormAsObj = Activator.CreateInstance(formType)
Catch ex As Exception
Cursor.Current = Cursors.Default
MessageBox.Show("clicca meglio:" + ex.ToString)
Exit Sub
End Try
Dim f As Form = CType(exFormAsObj, Form)
f.MdiParent = Me
f.Show()
Cursor.Current = Cursors.Default
End Sub
То есть имя формы находится в теге кнопки. Я создаю новый экземпляр формы с Activator.CreateInstance(formType)
, затем показываю его: f.Show()
.
Я почти уверен, что проблема заключается в создании этой динамической дочерней формы, но я не могу понять, где.
edit2:
Найденный! В моей форме обычное событие Load я делал
myform.SuspendLayout()
' various instructions
myform.ResumeLayout(False)
вместо False я должен был написать true: myform.ResumeLayout(True)
Так просто, прости.