2010-11-01 52 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()