1

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

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

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

4

1 回答 1

1

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

所以,在你的主要形式中,你可能有这样的东西:

Public StockClass As New Stocking

然后,因为它没有作为私有变量受到保护,所以您可以通过类似的方式从辅助表单访问它

showForm.StockClass.showItems(Label00)

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

于 2013-02-22T20:28:30.547 回答