【问题标题】:Passing variables between windows forms in VS 2010在 VS 2010 中的 windows 窗体之间传递变量
【发布时间】:2013-07-17 18:46:03
【问题描述】:

我有两种形式。表格 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 返回正确的结果,但我的 gui 元素都没有出现。如果我将表单 1 上的代码更改为 Form2.show(),我会看到设计器中的表单。

关于如何让这些项目出现的任何想法?

【问题讨论】:

  • 所以您只是还没有编写代码来将 Employee 的字段值放入控件中?所需的 InitializeComponent() 调用也丢失了。

标签: vb.net winforms visual-studio-2010 variables


【解决方案1】:

New 子代码在 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 将不会呈现。

【讨论】:

  • 谢谢,我在看到您的答案之前已经做出了更改,并来到这里发布解决方案。我发现令人沮丧的是(恕我直言)每次加载 Windows 窗体时您都应该看到该调用,因此像我这样的新程序员知道它需要在那里。
  • 不客气。我确实明白你在说什么,但是,如果你要转到 Form2.vb 的代码并在左上角下拉菜单中选择“Form2”并在右上下拉菜单中选择“新建”,它将填充 @987654324 @ 和 cmets 给你。
【解决方案2】:

您甚至不必使用 InitializeComponent 或 New 函数。

我已经举了一个例子来说明这很容易做到。

点击“显示表单”会出现以下结果:

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

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

【讨论】:

  • 我的问题不在于代码,而是缺少初始化调用。
  • @gwhenning 也许是这样,但是根据标题查看问题的人可能会发现答案很有帮助,因为这个答案是我想要找到的,并且考虑到问题的标题,它最有意义。
【解决方案3】:

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

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

在 button_click 上的菜单中

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()

在 Form2(Ordine)中:

Private Sub Ordine_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

public hotel as string

msgbox hotel

就是这样!!

【讨论】:

  • 感谢您的迟到回复,问题不在于传递变量,而是没有任何 UI 控件正在初始化。我必须添加 InitializeComponent() 才能显示 UI 控件。
  • 是的,我理解,但是使用此代码,您可以在每次需要打开表单时传递尽可能多的变量(有时您可能需要传递 1 有时需要传递 20)。这很容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多