Vb.net 在VS 2010中在windows窗体之间传递变量

Vb.net 在VS 2010中在windows窗体之间传递变量,vb.net,winforms,visual-studio-2010,variables,Vb.net,Winforms,Visual Studio 2010,Variables,我有两张表格。表单1允许用户从下拉组合框中选择员工。然后将该员工传递到表单2中,用户在表单中输入有关该员工的其他信息。然后,该数据将被传递到SQL表中 在表格1中,我有: Dim ChangeJobInfo As New Form2(Employee) ChangeJobInfo.Show() 在表格2中,我有: Public Sub New(ByVal Employee As String) MsgBox(Employee) End Sub 变量通过得很好。问题是新表单上没有显示任何内容。

我有两张表格。表单1允许用户从下拉组合框中选择员工。然后将该员工传递到表单2中,用户在表单中输入有关该员工的其他信息。然后,该数据将被传递到SQL表中

在表格1中,我有:

Dim ChangeJobInfo As New Form2(Employee)
ChangeJobInfo.Show()
在表格2中,我有:

Public Sub New(ByVal Employee As String)
MsgBox(Employee)
End Sub
变量通过得很好。问题是新表单上没有显示任何内容。当我设置Form2时,我添加了一个组合框、日期选择器、两个文本框、提交按钮等,但是当表单加载时,它是完全空白的。没有错误,MsgBox返回正确的结果,但没有显示my gui元素。如果我将表单1上的代码更改为Form2.show(),我会看到表单在设计器中的布局


关于如何显示这些项目,您有什么想法吗?

将您在Form2.vb中的
子项的代码更改为:

Public Sub New(ByVal Employee As String)

    ' This call is required by the designer.

    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.

    MsgBox(Employee)

End Sub

如果不调用InitializeComponent(),则无法呈现完整的GUI。

甚至不必使用InitializeComponent或新函数

我举了一个例子来说明这是多么容易做到的

单击“显示表单”将显示以下结果:

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Form2.Show()
End Sub
它仅用于显示第二个表单

单击“传递数据”将生成以下代码:

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    Form2.Label1.Text = TextBox1.Text
End Sub

如上所示,您可以将数据直接从一个控件传递到另一个控件。同样的想法也适用于变量。

我迟到了,但我认为这个答案会有所帮助

例如,名为“菜单”的Form1打开并将变量传递给名为“ordine”的Form2。 要传递的变量是“hotel”

在菜单中单击按钮

Dim ordinef As New Ordine()

If ordinef Is Nothing Then
    'control that form is not opened yet if open close before
    ordinef = New Ordine()
Else
    ordinef.Close()
    ordinef = New Ordine()
End If

ordinef.hotel = hotel

ordinef.Show()
在形式2中(Ordine):


就这样

那么您还没有编写代码将Employee的字段值放入控件?所需的InitializeComponent()调用也丢失。谢谢,我在看到您的答案之前做了更改,并在这里发布解决方案。让我感到沮丧的是(IMHO)每次加载windows窗体时,您都会看到这个调用,所以像我这样的新程序员知道它需要在那里。不客气。我确实明白你的意思,但是,如果你转到Form2.vb的代码,在左上角的下拉列表中选择“Form2”,在右上角的下拉列表中选择“New”,它会为你填充
InitializeComponent()
和注释。我的问题不是代码,而是缺少初始化调用。@gwhenning可能是这样,但是根据标题查看问题的人可能会发现答案很有帮助,因为这个答案正是我想要找到的,而且考虑到问题的标题,它最有意义。感谢您的延迟回复,问题并没有传递变量,而是没有初始化任何UI控件。我必须添加InitializeComponent()才能显示UI控件。是的,我理解,但使用此代码,每次需要打开表单时,您可以传递任意多的变量(有时可能需要传递1,有时需要传递20)。这很容易。
Private Sub Ordine_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

public hotel as string

msgbox hotel