У меня проблема с WinForms (VB.NET).
Главное окно - это контейнер MDI. Пользователь открывает новое дочернее окно:
, а затем разворачивает его до максимума, так что окно правильно заполняет клиентскую область. Мои элементы управления должным образом привязаны (с помощью свойства IDE Anchor) к сторонам окна, так что при увеличении окна всегда хорошо заполняется клиентская область:
В этом состоянии (окна клиента развернуты) пользователь открывает другое или новое дочернее окно, но элементы управления нового окна не растягиваются, то есть они не «понимают», что они должны растягиваться!
Это особенно раздражает, потому что, если пользователь пытается восстановить окно, элементы управления растягиваются, поэтому они исчезают ( видеть, что списка больше нет)!
Это ошибка? Как я могу это решить?
править: согласно комментарию Ханса Пассанта, я создал новый простой проект, и он работал так, как должен. Поэтому я исследовал, что отличалось от моего реального проекта и образца. Разница в том, что в моем проекте я создаю формы динамически.
Я динамически создаю множество кнопок на панели инструментов. Когда пользователь нажимает кнопку, выполняется следующий код:
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: Я создаю новый экземпляр формы с помощью Activator.CreateInstance (formType)
, затем показываю его: f.Show ()
.
Я почти уверен, что проблема в в создании этой динамической дочерней формы, но я не могу понять, куда.
edit2: Я создаю новый экземпляр формы с помощью Activator.CreateInstance (formType)
, затем показываю его: f.Show ()
.
Я почти уверен, что проблема в в создании этой динамической дочерней формы, но я не могу понять, куда.
edit2: Найденный! В моей форме обычное событие Load я делал
myform.SuspendLayout()
' various instructions
myform.ResumeLayout(False)
вместо False, мне следовало написать true: myform.ResumeLayout (True)
Так просто, извините.