DJ был прав, я думаю
Одна из самых запутанных (и раздражающих) вещей о VB. NET имеет свои корни в VB6. Пытаясь обратиться к обновлению программистов VB6, Microsoft сделала так, чтобы каждое приложение VB. NET создавало экземпляры по умолчанию для каждой из форм, и создаваемый экземпляр имел то же имя, что и тип. Это замечательно для программистов на VB6, которым не нужно было реально понимать разницу между типом и экземпляром, но это вызывает большое раздражение у тех из нас, кто смотрит на вызов Form2.Show()
и думает, что он написан с большой буквы, как будто он типа, так что, может быть, это статический / общий метод ", но потом понимаете" нет, на самом деле это не статический / общий метод в экземпляре с именем Form2
, созданный процессом, спрятанным где-то в черном ящике ". VB. NET разрешение переменных экземпляров, названных идентично типу, также не помогает людям оценить разницу между экземплярами и общими типами. Dim String as New String, String.IsNullOrEmpty(String)
Ахой
В любом случае. Возвращаясь к рассматриваемой проблеме
Ваша Форма 3 помещает вещи в список Form2, , но Форма 2, к которой она относится, - это Форма 2, которую VB. NET создал для вас . Когда вы устанавливаете форму запуска на Form2, это также тот же экземпляр Form2, который появляется. Эта Form2 создает новую Form3, Form3, помещает вещи в список Form2
, вы видите их, потому что это Form2, которая на экране (форма запуска показана, остальные формы скрыты)
Когда вы делаете Form1 своей формой запуска, этот экземпляр создает NEW Form2 и показывает ее. Эта новая форма Form2 показывает НОВУЮ FOrm3, но видимая вами форма FOrm3 все еще проталкивает свои вещи в форму Form2, созданную для вас VB. NET, которая невидима, потому что это не форма запуска
Если вы все еще не совсем понял, поместите это изменение кода в Form2, если Form2 - ваш объект запуска:
'BEFORE:
' Open een venster om een productie aan te passen in de lijst met producties en pas de objecten in dat venster aan.
Dim venster As New Form3
'AFTER:
' Open een venster om een productie aan te passen in de lijst met producties en pas de objecten in dat venster aan.
Form1.Text = "VB.NET made this form automatically and my visibility was " & Form1.Visible
Form2.Text = "VB.NET made this form automatically and my visibility was " & Form2.Visible
Form3.Text = "VB.NET made this form automatically and my visibility was " & Form3.Visible
Form1.Show()
Form2.Show()
Form3.Show()
Dim venster As New Form3
venster.Text = "SMoKuM made this form in code"
Или поместите это изменение кода в Form1, если Form1 - ваш объект запуска:
'BEFORE:
' Open een venster om een productie aan te passen in de lijst met producties en pas de objecten in dat venster aan.
Dim venster As New Form2
'AFTER:
' Open een venster om een productie aan te passen in de lijst met producties en pas de objecten in dat venster aan.
Form1.Text = "VB.NET made this form automatically and my visibility was " & Form1.Visible
Form2.Text = "VB.NET made this form automatically and my visibility was " & Form2.Visible
Form3.Text = "VB.NET made this form automatically and my visibility was " & Form3.Visible
Form1.Show()
Form2.Show()
Form3.Show()
Dim venster As New Form2
venster.Text = "SMoKuM made this form in code"
Теперь используйте ваше приложение. Вы заметите, что независимо от того, установили ли вы form1 или form2 в качестве объекта запуска, вы получите windows больше, чем ожидаете, но в список заголовка формы всегда будет добавляться информация, гласящая: «VB. NET сделал это автоматически "и логическое значение в конце строки заголовка должно указывать, была ли форма видимой или невидимой при запуске приложения
Вы можете избежать этого ужасного поведения, проверив this вопрос
или используя C#:)