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

这就是我填充和按钮单击操作以尝试将数据复制到我的主列表框的方式。忽略尝试复制第二组数据的调用,因为如果我不能只复制一个,那么我没有业务尝试复制 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

现在,让我们假设一个表单上有两个 ListBox 对象(lstLeft 和 lstRight),有两个按钮 - 一个用于向右移动项目,一个用于向左移动项目:

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,并从当前 ListBox 中删除对所选 ListItem 对象的引用。如果您想在两个单独的表单之间执行此操作,则每个表单都需要一个Public Property AddToList(item As ListItem)函数。首先,调用对面窗体上的函数以添加到该窗体的 ListBox,然后从当前窗体中删除 ListItem 对象。

于 2012-04-30T20:57:44.813 回答