代码之家  ›  专栏  ›  技术社区  ›  Martijn

vb.net中窗体的自定义构造函数:最佳实践

  •  8
  • Martijn  · 技术社区  · 14 年前

    我想从其他窗体打开一个新窗体,并将选定对象从该窗体上的控件传递给新窗体。我认为,明智的做法是将其作为表单构造函数的参数。现在我知道visual studio GUI为我的表单创建了部分类,这些类包含了我可以在设计器中拖到那里的属性。我假设它也有一个默认的构造函数。因为它可能会执行初始化表单所需的所有操作,我想应该从自定义构造函数ala调用它

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

    显然不是这样,因为它找不到默认构造函数。问题是,visual studio会不遗余力地阻止我看到生成的构造函数,所以我知道如何访问它。这使我相信我确实做错了,应该走上不同的道路,因为你被迫走上的道路通常是明智的做法,而我通常发现得太晚了。

    3 回复  |  直到 14 年前
        1
  •  18
  •   Olivier Jacot-Descombes    11 年前

    这是一个相当简单的例子。 这将进入您的“主”窗体(要从中调用新窗体的窗体):

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

    form2Name(item)

    在新表单(form2Name)中添加以下代码:

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

    你可以做任何其他你需要在你的形式。

        2
  •  3
  •   Chris W    14 年前

    对于VB.Net,我想你要打的电话是

    MyBase.New()
    
        3
  •  2
  •   Paul Keister    14 年前

    派生的窗体类自动继承System.Windows.Forms.form的默认构造函数。此默认构造函数在派生构造函数代码执行之前自动调用。找不到默认构造函数的任何代码的原因是派生类没有专门化默认构造函数。如果希望定义自己的默认构造函数,可以。也可以定义不带参数的构造函数。

    如果删除以下行,则代码应正常工作:

    Me.New()