2010-11-01 50 views
8

我是很新的vb.net,和Windows Forms的研究与开发为一体,所以这可能都是很基本的,但在这里不用。自定义构造函数:最佳实践

我想从一些其他形式打开一个新的形式,并从该表格到新的窗体上的一个控制传递一些选定的对象。我认为,明智的做法是作为窗体构造函数的参数。现在我知道Visual Studio GUI为我的表单创建了部分类,这些类包含可以在设计器中拖动到其中的属性。我假设它也包含一个默认的构造函数。因为它可能做到这一点是需要初始化形式各种各样的东西,我想我应该从我的自定义构造函数中调用它阿拉

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

这显然不是它,因为它无法找到一个默认的构造函数。事情是,Visual Studio会花费很多时间来防止我看到生成的构造函数,所以我知道如何访问它。这使我相信,我其实这样做是错误的,应该已经设置了一些不同的道路,因为你是被迫到通常的路径是做合理的事情,这是我usualy发现太晚。

所以我应该怎么做这样的事情?

回答

14

这是一个相当简单的例子。 这进入你的“主”的形式(您想从打电话给你的新形式之一):

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

form2Name(item)符像“form2Name”是你要打开的窗体的名称和“项目”是要传递的参数。

在新的形式(form2Name)添加以下代码:

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

你可以做您的表单需要任何其他。 希望这有助于。

3

对于VB.Net我认为你是后呼叫

MyBase.New() 
+0

+1 brevitas – Martijn 2010-11-01 15:27:21

+0

与下面的aswer Combinding这样的:如果我称之为'MyBase.New()',我还是要呼吁'的InitializeComponent()'? – Martijn 2010-11-01 15:28:41

+0

默认窗体构造函数通常会调用它。如果您只是删除Me.new()行,则TBH代码很好。我只是简单地展示了如何正确调用基础构造函数。 – 2010-11-01 15:41:08

2

你的派生形式类自动继承了System.Windows.Forms.Form中默认的构造函数。在派生构造函数代码执行之前,这个默认构造函数会自动调用。您找不到默认构造函数的任何代码的原因是因为派生类没有专门使用默认构造函数。如果你想定义你自己的默认构造函数,你可以。你也可以定义一个没有参数的构造函数。

你的代码应该正常工作,如果您删除此行:

Me.New()