1

メインプログラム(フォーム)には、2つのリストボックス、1つのテキストボックス、およびボタンがあります。各リストボックスで2つのアイテムを選択し、テキストボックスに数値を入力すると、配列にストックされるようにサポートされます。クラスを使ってこれをやりたかったのです。(私はこれについて質問しました、それは今うまくいきます)。問題は、結果を別の形式で表示したいということです。私のクラスのコードは次のようになります。

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

そして、私の2番目の形式では、配列にストックされた結果を表示するには、次のようにします。

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)

もちろん、危険なのは、これが2つのフォームを緊密に結合することです。長期的には、初期化中に最初のフォームに入力されたStockClassを2番目のフォームに送信する方法を学ぶ方がよいでしょうが、WinFormsの開発については、申し訳ありません。

于 2013-02-22T20:28:30.547 に答える