我有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
答案 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#中一样)。如果您现在不这样做,那么立即学习它是另一回事。