如何使用类将数据从一个表单传递到另一个表单(VB.Net)

时间:2013-02-22 20:19:25

标签: vb.net forms class

在我的主程序(表单)中,我有两个列表框,一个文本框和一个按钮。 当我在每个列表框中选择两个项目并在文本框中输入一个数字时,可以将其存储在一个数组中。我想用一堂课来做这件事。 (我刚问了一个关于这个的问题,现在效果很好)。问题是我想以不同的形式显示结果。 我班上的代码如下所示:

Public Class Stocking


Public sale(3, 4) As Integer
Public numberSellers(3) As Integer
Public numberProducts(4) As Integer


Public Sub addItem(ByRef my_sellerListBox As ListBox, ByRef my_productListBox As ListBox, ByRef my_saleTextBox As TextBox)
    Dim sellerLineInteger As Integer
    Dim productColumnInteger As Integer

    sellerLineInteger = my_sellerListBox.SelectedIndex
    productColumnInteger = my_productListBox.SelectedIndex

    ' add in two dimensional array 
    If sellerLineInteger >= 0 And productColumnInteger >= 0 Then
        sale(sellerLineInteger, productColumnInteger) = Decimal.Parse(my_saleTextBox.Text)
    End If

    my_saleTextBox.Clear()
    my_saleTextBox.Focus()

    For sellerLineInteger = 0 To 3
        For productColumnInteger = 0 To 4
            numberSellers(sellerLineInteger) += sale(sellerLineInteger, productColumnInteger)
        Next productColumnInteger
    Next sellerLineInteger

End Sub
Public Sub showItems(ByRef my_label)

    my_label.Text = numberSellers(0).ToString 'using this as a test to see if it works for now


End Sub
End Class

我的主要表单如下:

Public Class showForm

Public sale(3, 4) As Integer
Public numberSellers(3) As Integer
Public numberProducts(4) As Integer

Dim StockClass As New Stocking

    Public Sub addButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles addButton.Click

    StockClass.addItem(sellerListBox, producttListBox, saleTextBox)

End Sub

Public Sub SalesByMonthToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SalesByMonthToolStripMenuItem.Click

    saleForm.Show()

在我的第二种形式中,显示阵列中存储的结果是:

Public Class saleForm

Dim StockClass As New Stocking

Public Sub saleForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    StockClass.showItems(Label00)
    'Only using one label as a test for now.

End Sub

End Class

End Sub

我对它进行了测试并试图查看结果是否显示在主窗体上,确实如此。所以我猜这个问题是因为我使用了不同的形式。另外我认为这可能是因为我以不同的形式再次调用该类并且不保留数据。

1 个答案:

答案 0 :(得分:1)

问题是您的saleForm正在实例化一个新的Stocking对象。您需要在创建saleForm期间将在主表单中创建的Stocking对象发送到新表单,或者您需要在主表单中公开提供Stocking对象,可能通过属性。

因此,在您的主要表单中,您可能会遇到以下情况:

Public StockClass As New Stocking

然后,因为它不作为私有变量保护,您可以通过类似

之类的内容从二级表单访问它
showForm.StockClass.showItems(Label00)

当然,危险在于它将两种形式紧密地联系在一起。从长远来看,学习如何在初始化期间将第一种形式填充的StockClass发送到第二种形式会更好,但我对WinForms开发的记忆不足以帮助解决这个问题,抱歉。