пользовательских конструкторов для форм в vb.net: лучшие практики - PullRequest
8 голосов
/ 01 ноября 2010

Я довольно новичок в vb.net, и Windows формирует разработку в целом, так что это может быть очень просто, но здесь все.

Я хотел бы открыть новую форму из какого-то другогосформировать и передать некоторый выбранный объект из элемента управления этой формы в новую форму.Я подумал, что разумным способом сделать это был параметр конструктора форм.Теперь я знаю, что графический интерфейс Visual Studio создает частичные классы для моих форм, которые содержат свойства, которые я могу перетащить туда в конструкторе.Я предполагаю, что он также содержит конструктор по умолчанию.Так как он может делать все, что нужно для инициализации формы, я решил, что мне следует вызывать его из моего собственного конструктора ala

public sub new(byval my_parameter as Foo)
  Me.new()
  Me.my_parameter = my_parameter
  do_some_initialisation()
end sub

Это явно не так, потому что он не может найтиконструктор по умолчанию.Дело в том, что Visual Studio делает все возможное, чтобы я не видел сгенерированный конструктор, поэтому я знаю, как получить к нему доступ.Это заставляет меня поверить, что я на самом деле делаю это неправильно, и должен был пойти другим путем, поскольку путь, по которому вы вынуждены идти, обычно является разумной вещью, которую я обычно нахожу слишком поздно.

Так, как я должен делать что-то подобное?

Ответы [ 3 ]

17 голосов
/ 01 ноября 2010

Это довольно простой пример.Это входит в вашу «основную» форму (ту, из которой вы хотите вызвать новую форму):

Dim childForm1 As New form2Name(item)
childForm1.Text = "Title of your new form"
Call childForm1.Show()

form2Name(item) распадается на «form2Name» - это имя формы, которую вы хотите открыть, и«item» - это параметр, который нужно передать.

В новой форме (form2Name) добавьте этот код:

Public Sub New(ByVal item As String)
    InitializeComponent() ' This call is required by the Windows Form Designer.
    MsgBox(item)
End Sub

Вы можете делать все, что вам нужно в вашей форме.Надеюсь, это поможет.

3 голосов
/ 01 ноября 2010

Для VB.Net я думаю, что вы звоните после

MyBase.New()
2 голосов
/ 01 ноября 2010

Ваш производный класс формы автоматически наследует конструктор по умолчанию для System.Windows.Forms.Form.Этот конструктор по умолчанию вызывается автоматически перед выполнением вашего производного кода конструктора.Причина, по которой вы не можете найти код для конструктора по умолчанию, заключается в том, что производный класс не специализирует конструктор по умолчанию.Если вы хотите определить свой собственный конструктор по умолчанию, вы можете.Вы также можете определить конструктор без параметров.

Ваш код должен работать нормально, если вы удалите эту строку:

Me.New()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...