VB .Net列表框和对象集合

时间:2013-03-06 22:25:30

标签: vb.net

我想在以下两个集合之间移动Item对象。

Private ItemsInRoom As New List(Of CItem)

Private Inv As New List(Of CItem)

我希望通过2个ListBox来完成。 1是Inventory,另一个是Item列表。我怎么能这样做。

CItem类有几个成员,只需要在ListBox中显示项目的名称。我已经在这里工作了几个小时,但我无法得到任何工作。这个解释对我正在做的事情有意义吗?如果没有,我还能解释一下,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

CItem课程中,您需要覆盖ToString()功能。这将使名称显示在listbox

Public Class CItem    
    Public Overrides Function ToString() As String
      Return Me.Name
    End Function
    'etc...
End Class

答案 1 :(得分:0)

我认为你想要的是:

Form

使用以下代码完成:

Option Explicit On

Public Class Form1

    Private ItemsInRoom As New List(Of CItem)
    Private ItemsInInv As New List(Of CItem)

    Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
        MyBase.OnLoad(e)

        ItemsInInv.Add(New CItem(1001, "Egret"))
        ItemsInInv.Add(New CItem(1002, "Dove"))
        ItemsInInv.Add(New CItem(1003, "Hawk"))

        UpdateBindings()
    End Sub

    Public Function CheckOut(ByVal item As CItem) As Boolean
        If item IsNot Nothing Then
            ItemsInInv.Remove(item)
            ItemsInRoom.Add(item)
            Return True
        End If
        Return False
    End Function

    Public Function CheckIn(ByVal item As CItem) As Boolean
        If item IsNot Nothing Then
            ItemsInRoom.Remove(item)
            ItemsInInv.Add(item)
            Return True
        End If
        Return False
    End Function

    Public Sub UpdateBindings()
        itemsInInvListBox.BeginUpdate()
        itemsInInvListBox.DataSource = Nothing
        itemsInInvListBox.DataSource = ItemsInInv
        itemsInInvListBox.DisplayMember = "Name"
        itemsInInvListBox.EndUpdate()
        itemsInInvListBox.Refresh()

        itemsInRoomListBox.BeginUpdate()
        itemsInRoomListBox.DataSource = Nothing
        itemsInRoomListBox.DataSource = ItemsInRoom
        itemsInRoomListBox.DisplayMember = "Name"
        itemsInRoomListBox.EndUpdate()
        itemsInRoomListBox.Refresh()
    End Sub

    Private Sub itemsInInvListBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles itemsInInvListBox.SelectedIndexChanged
        checkOutButton.Enabled = itemsInInvListBox.SelectedIndex <> -1
    End Sub

    Private Sub itemsInRoomListBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles itemsInRoomListBox.SelectedIndexChanged
        checkInButton.Enabled = itemsInRoomListBox.SelectedIndex <> -1
    End Sub

    Private Sub checkOutButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles checkOutButton.Click
        Dim item As CItem = CType(itemsInInvListBox.SelectedItem, CItem)
        If CheckOut(item) Then
            UpdateBindings()
        End If
    End Sub

    Private Sub checkInButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles checkInButton.Click
        Dim item As CItem = CType(itemsInRoomListBox.SelectedItem, CItem)
        If CheckIn(item) Then
            UpdateBindings()
        End If
    End Sub
End Class


Public Class CItem
    Public Sub New(ByVal item_id As UInteger, ByVal item_name As String)
        Me.m_id = item_id
        Me.m_name = item_name
    End Sub
    Private m_name As String
    Public Property Name() As String
        Get
            Return m_name
        End Get
        Set(ByVal value As String)
            m_name = value
        End Set
    End Property

    Private ReadOnly m_id As UInteger
    Public ReadOnly Property ID() As UInteger
        Get
            Return m_id
        End Get
    End Property

End Class