VB - 将Variables / String传递给另一个Form并显示在ListView中

时间:2016-01-31 21:17:59

标签: vb.net string forms listview

我有2个表单,formOrder和formOrderSummary。

在formOrder上有3个按钮和一个listView1。 btnVanilla,btnChocolate和btnNextPage以及listview1

在formOrderSummary上有一个listView2。

每次点击香草或巧克力时,它都会将其添加到列表视图中。

我要做的是让formOrder上的listview1显示在listviewOrder中 在formOrderSummary上。目前,如果列表视图的格式相同,我就可以使用它,但如果列表视图的格式不同,我似乎无法做到。

下面有一个屏幕截图,可视化我的意思

formOrder

Public Class formOrder

Dim frm2 As New formOrderSummary
Public vanillaCount As Integer
Public chocolateCount As Integer
Public mynumber As Double

Private Sub btnVanilla_Click(sender As Object, e As EventArgs) Handles btnVanilla.Click

    Me.vanillaCount = Me.vanillaCount + 1
    Dim str(3) As String
    Dim item As ListViewItem

    str(0) = "Vanilla"
    str(1) = Me.vanillaCount.ToString()
    mynumber = str(1) * 1
    str(2) = mynumber.ToString("C")

    Dim WholeString As String = str(0)

    item = New ListViewItem(str)
    For maindish As Integer = 0 To Me.ListView1.Items.Count - 1


        If (Me.ListView1.Items(maindish).ToString = "ListViewItem: {" + WholeString + "}") Then
            Me.ListView1.Items.RemoveAt(maindish)
            Me.ListView1.Items.Add(item)

            Return
        End If
    Next

    Me.ListView1.Items.Add(item)

End Sub

Private Sub BtnChocolate_Click(sender As Object, e As EventArgs) Handles b btnChocolate.Click

    Me.chocolateCount = Me.chocolateCount + 1
    Dim str(3) As String
    Dim item As ListViewItem

    str(0) = "Chocolate"
    str(1) = Me.chocolateCount.ToString()
    mynumber = str(1) * 1.5
    str(2) = mynumber.ToString("C")

    Dim WholeString As String = str(0)

    item = New ListViewItem(str)
    For maindish As Integer = 0 To Me.ListView1.Items.Count - 1


        If (Me.ListView1.Items(maindish).ToString = "ListViewItem: {" + WholeString + "}") Then
            Me.ListView1.Items.RemoveAt(maindish)
            Me.ListView1.Items.Add(item)

            Return
        End If
    Next

    Me.ListView1.Items.Add(item)

End Sub

Private Sub btnConfirm_Click(sender As Object, e As EventArgs) Handles btnConfirm.Click

    frm2.Show()
    Me.Hide()
End Sub

End Class

FormOrderSummary

Public Class formOrderSummary

    Private Sub formOrderSummary_Load(sender As Object, e As EventArgs) Handles MyBase.Load


    End Sub
End Class

enter image description here

1 个答案:

答案 0 :(得分:0)

表单只是类,它在所有表单的顶部都是这样说的:

Public Class formOrder 

所以,你可以添加你想要的所有方法或属性。您真正需要做的就是创建一个方法(子)来传递订单。更大的问题是如何在一种方法中传递2个东西(2个锥体)?如果冰淇淋专柜提供华夫饼干,洒水,味贝壳或其他附加物怎么办?

如果有办法将数据保持在一起并组织起来会不会很好?有:

Public Class IceCream

    Public Enum IceCreamFlavors
        Vanilla
        Chocolate
        Strawberry
    End Enum

    Public Property Flavor As IceCreamFlavors
    Public Property Sprinkles As Boolean
    Public Property Scoops As Int32

    Public Sub New()
        Scoops = 1
    End Sub

    Public ReadOnly Property Cost As Decimal
        Get
            Return GetCost()
        End Get
    End Property

    ' just because I dont like a lot of code in getters
    Private Function GetCost() As Decimal
        Dim price As Decimal = 0

        Select Case Flavor
            Case IceCreamFlavors.Chocolate
                price = 0.75D
            Case IceCreamFlavors.Vanilla
                price = 0.65D
            Case IceCreamFlavors.Strawberry
                price = 55D
                ' coming soon: Rocky Road!
        End Select

        Dim temp = (Scoops * price)

        If Sprinkles Then
            temp += 0.25D
        End If
        Return temp
    End Function
End Class

好的,那将保存一个圆锥的信息。请注意它是如何包含与锥形项目相关的所有内容,甚至是定价。很容易使它更复杂,如WaffleCones,Chocolate shell等,而不会在表单中添加大量松散变量。

我们还需要一种方法来容纳其中几种。我知道你在想什么: array 。不要去那里A List(of IceCream)比数组更容易使用。

创建订单

Private cones As New List(Of IceCream)   ' will only hold icecream items
...
Dim item = New IceCream
item.Flavor = IceCream.IceCreamFlavors.Chocolate
item.Sprinkles = False
item.Scoops = 2
cones.Add(item)

该块创建一个新的Icecream项,然后设置各种属性,最后将其添加到列表中。请注意我怎么没有告诉列表有多大?

item = New IceCream
item.Flavor = IceCream.IceCreamFlavors.Vanilla
item.Sprinkles = True
cones.Add(item)

您可以通过相同的方式访问信息:Dim thisCost = item.Cost

IceCream类默认为1 scoop,因此您只需在不是一个独家新闻时设置它。您可以添加其他默认值。

传递数据

现在,在订单摘要表单上创建一个接受数据的方法:

Public Sub SummaryData(order As List(Of IceCream))

   ' post items to listview
   'e.g.: flavor = order(0).Flavor.ToString()
End Sub

如果您想逐项添加,请将其声明为一个项目:

Public Sub SummaryData(orderItem as IceCream)

(当你想删除一个时会出现问题)。传递数据:

frmSummaryINSTANCE.SummaryData(cones)

提示:更简单的方法是使用DataGridView。

dgv.DataSource = order

DataGridView将创建列并自动显示属性数据。

当然,您可以通过更改参数来使用此类而不使用类或列表,但随着参数的数量和类型的增加,它会变得冗长而密集。

表单实例
一旦正确组织了数据,就可以很容易地做任何你想做的事情。注意:这假设您正在使用表单实例。也就是说,而不是:

formOrderSummary.SummaryData(cones)

你做这样的事情:

Dim frmSumm As New formOrderSummary()
frmSumm.SummaryData(cones)

如上所述,表单是类,使用它们的正确方法是创建一个实例(就像在C#中一样)。如果您现在不这样做,那么立即学习它是另一回事。

您可能还希望看到:Five Minute Guide to Classes and Lists