0

グローバル変数と配列のモジュールである複数のフォームを使用して、あるリストボックスから別のリストボックスにデータをコピーしようとすると問題が発生します。この時点で、アイテムを選択してセカンダリリストボックスを形成し、それをメインリストボックスに送信しようとすると、配列の範囲外であると表示されます。私はこれを行うためのあらゆる異なる方法を試しましたが、まだ解決策を考え出していません。まだ私を襲っていないのは、おそらく明らかなことだと思います。

これが、アレイを開始してセカンダリリストボックスにデータを入力する方法です。

Public mp3Albums() As String = {" Tres Hombres ZZ TOP ", " Fandango!   ZZ TOP ", " Soul Kiss Tom Duda ", " Instrumental Telepathy Tom Duda ", " Dark Side of the Moon  Pink Floyd ", " Seventh Sojourn  Moody Blues ", " In Search of the lost Chord  Moody Blues "}

私のメインフォームのリストボックスはlstShoppingCartと呼ばれています

これが私がデータを入力し、ボタンクリックアクションでデータをメインリストボックスにコピーしようとする方法です。1つだけをコピーできない場合は、タイトルと価格の2つのセットをコピーしようとするビジネスがないため、コピーしようとしている2番目のデータセットの呼び出しは無視してください。思ったより簡単でない限り

Dim frmMain As New MainForm
frmMain.lstShoppingCart.Items.Add("A" & lstVinylAlbum.SelectedIndex & ": " & lstVinylAlbum.SelectedItem.ToString)
4

1 に答える 1

1

リスト ボックス内の項目を表す小さなクラスから始めます。

Public Class ListItem

    Private _key As String = String.Empty
    Private _value As String = String.Empty

    Public Sub New(ByVal key As String, ByVal value As String)

        _key = key
        _value = value

    End Sub

    Public ReadOnly Property Key() As String
        Get
            Return _key
        End Get
    End Property

    Public ReadOnly Property Value() As String
        Get
            Return _value
        End Get
    End Property

    ' Prevents the object type from displaying in the list box.
    Public Overrides Function ToString() As String

        Return _value

    End Function

End Class

ここで、1 つのフォーム (lstLeft と lstRight) に 2 つの ListBox オブジェクトがあり、2 つのボタン (項目を右に移動するボタンと項目を左に移動するボタン) があるとします。

Public Class Form1

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        InitData()

    End Sub

    Private Sub InitData()

        With lstLeft.Items

            .Add(New ListItem("1", "Tres Hombres ZZ TOP"))
            .Add(New ListItem("2", "Fandango! ZZ TOP"))
            .Add(New ListItem("3", "Soul Kiss Tom Duda"))
            .Add(New ListItem("4", "Instrumental Telepathy Tom Duda"))

        End With

    End Sub

    Private Sub btnMoveRight_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMoveRight.Click

        If lstLeft.SelectedItem IsNot Nothing Then

            Dim selectedItem As ListItem = DirectCast(lstLeft.SelectedItem, ListItem)

            lstRight.Items.Add(selectedItem)
            lstLeft.Items.Remove(selectedItem)

        End If

    End Sub

    Private Sub btnMoveLeft_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMoveLeft.Click

        If lstRight.SelectedItem IsNot Nothing Then

            Dim selectedItem As ListItem = DirectCast(lstRight.SelectedItem, ListItem)

            lstLeft.Items.Add(selectedItem)
            lstRight.Items.Remove(selectedItem)

        End If

    End Sub

End Class

これは、選択した ListItem オブジェクトへの参照を「他の」ListBox に追加し、選択した ListItem オブジェクトへの参照を現在の ListBox から削除するだけです。2 つの別々のフォーム間でこれを行う場合は、各フォームに関数が必要になりPublic Property AddToList(item As ListItem)ます。まず、反対のフォームで関数を呼び出してそのフォームの ListBox に追加し、次に現在のフォームから ListItem オブジェクトを削除します。

于 2012-04-30T20:57:44.813 に答える