【问题标题】:How do I add menu items from a class list to another list of items in VB form?如何将菜单项从类列表添加到 VB 表单中的另一个项目列表?
【发布时间】:2021-10-21 05:17:51
【问题描述】:

所以我在 VB 中创建了一个菜单表单,它要求用户从菜单中选择项目,然后使用价格来计算总数。 为此,我创建了 2 个列表,其中一个是主表单:

Dim menu As New List(Of MenuItem) From
 {
     New MenuItem With {.Name = "Burger", .Cost = 2.0 * txtburger.Text},
     New MenuItem With {.Name = "wrap", .Cost = 2.0 * txtwrap.Text},
     New MenuItem With {.Name = "Parmesan", .Cost = 2.5 * txtparmesan.Text},
     New MenuItem With {.Name = "Stirfry", .Cost = 3.0 * txtstirfry.Text},
     New MenuItem With {.Name = "pitta", .Cost = 2.5 * txtpitta.Text},
     New MenuItem With {.Name = "bundle", .Cost = 6.0 * txtbundle.Text},

此列表使用“MenuItem”类在菜单中创建项目并设置它们的价格。

第二个列表在“订单”类中:

Public Property Items As List(Of MenuItem) = New List(Of MenuItem) 

Public Sub AddItem(ByVal item As MenuItem)

        Items.Add(item)

    End Sub

此类使用“AddItem”方法将先前定义的完整菜单中的项目添加到此列表中。此处添加到此列表中的项目是用户在加载表单时将选择的项目。

但是如何在“订单”类中实例化一个对象,以便用户选择的项目从主表单添加到此列表中?每个项目旁边都有一个文本框,用于确定项目的数量。所以我必须为每个被选中的项目传递一个参数。 我不太确定该怎么做。

希望这一切都有意义,我做得对。

【问题讨论】:

    标签: vb.net list forms class oop


    【解决方案1】:

    请谨慎将主列表中的商品添加到订单中。这意味着同一个对象被多次引用,我认为这不是你想要的。您需要不同的对象(并且可能需要多个实例以相同的顺序)。

    知道了这一点,如何将 MenuItem 的新实例添加到 Order 中?

    首先,向 MenuItem 添加一个 Clone 函数,该函数返回一个类似于当前实例的 NEW MenuItem。

    Function Clone() As MenuItem
    
        Return New MenuItem With {.Name = Me.Name, .Cost = Me.Cost}
    
    End Function
    

    然后你只需要使用循环来添加任意数量的项目:

    Public Sub AddItem(ByVal item As MenuItem, ByVal count As Integer)
    
        For i As Integer = 0 To count - 1
            Items.Add(item.Clone())
        Next
    
    End Sub
    

    更多提示:

    • 不要乘以 MenuItem 的价格,每个项目的价格应为 1 项
    • 总价将为 Items.Sum(Function(o) o.Cost)(即所有商品成本的总和)
    • 不要公开您的项目列表,这意味着每个人都可以直接向其中添加项目而无需调用特定函数

    【讨论】:

    • 感谢您的帮助和建议。但是当我实例化一个对象时,我究竟传递了什么参数,它显示了用户从菜单中选择了什么项目?在用户选择项目之前,我怎么知道要运行多少个项目?
    猜你喜欢
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 2016-04-24
    相关资源
    最近更新 更多