在我的主程序(表单)中,我有两个列表框,一个文本框和一个按钮。 当我在每个列表框中选择两个项目并在文本框中输入一个数字时,可以将其存储在一个数组中。我想用一堂课来做这件事。 (我刚问了一个关于这个的问题,现在效果很好)。问题是我想以不同的形式显示结果。 我班上的代码如下所示:
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
我对它进行了测试并试图查看结果是否显示在主窗体上,确实如此。所以我猜这个问题是因为我使用了不同的形式。另外我认为这可能是因为我以不同的形式再次调用该类并且不保留数据。
答案 0 :(得分:1)
问题是您的saleForm正在实例化一个新的Stocking对象。您需要在创建saleForm期间将在主表单中创建的Stocking对象发送到新表单,或者您需要在主表单中公开提供Stocking对象,可能通过属性。
因此,在您的主要表单中,您可能会遇到以下情况:
Public StockClass As New Stocking
然后,因为它不作为私有变量保护,您可以通过类似
之类的内容从二级表单访问它showForm.StockClass.showItems(Label00)
当然,危险在于它将两种形式紧密地联系在一起。从长远来看,学习如何在初始化期间将第一种形式填充的StockClass发送到第二种形式会更好,但我对WinForms开发的记忆不足以帮助解决这个问题,抱歉。