Попробуйте позвонить MyBase.InitializeComponent()
от второго потомка.Вам, вероятно, придется изменить уровень доступа к нему тоже.
РЕДАКТИРОВАТЬ
Это беспокоило меня всю ночь.Оказывается, это случай отсутствующих конструкторов.Если вы используете рефлектор, вы увидите, что Form1
имеет конструктор, который вызывает Me.InitializeComponent()
, хотя его нет ни в Form1.vb
, ни в Form1.Designer.vb
.
<DesignerGenerated> _
Public Class Form1
Inherits Form
' Methods
Public Sub New()
Me.InitializeComponent
End Sub
...
End Class
Если вы создадитеПриложение C # WinForms, конструктор видим, так что это заставляет меня думать, что это вещь VB, чтобы скрыть это.Кроме того, если вы вручную добавите Sub New
к Form1
, он заполнит некоторый код для вас, по сути, «скрывая его».
Я предполагаю, что VS посмотрел на ваш код и понял, что это былпотомок System.Windows.Forms.Form
, но технически это было сделано неправильно, поскольку он не вызывал MyBase.New()
(так как не мог, потому что его не существовало), поэтому он просто пытался угадать.Он «знает», как добавить вызов к InitializeComponent()
в форме, которую он создал, и «знает», как это сделать для формы, которую вы просматриваете, но он не потрудился пройтись по цепочке форм и сделать это.для всех них.Ошибка?Может быть.
Когда вы устанавливаете MoreBellsAndWhistles
в качестве формы запуска, вы никогда не видите ни одной из новых кнопок, верно?Вот как вы можете сказать, что это более сложная хитрость VS.
В любом случае, решение всей проблемы состоит в том, чтобы добавить это к обоим подклассам:
Public Sub New()
MyBase.New()
InitializeComponent()
End Sub
И добавить это кForm1
:
Public Sub New()
InitializeComponent()
End Sub