Vb.net 在VS 2010中在windows窗体之间传递变量
我有两张表格。表单1允许用户从下拉组合框中选择员工。然后将该员工传递到表单2中,用户在表单中输入有关该员工的其他信息。然后,该数据将被传递到SQL表中 在表格1中,我有: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 变量通过得很好。问题是新表单上没有显示任何内容。
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