我在VB.Net应用程序中有2个表单 在Form1中我有一个Listview元素 我想在Form2中显示相同的Listview,但具有不同的大小 做这个的最好方式是什么? 感谢
答案 0 :(得分:0)
不,没有内置方法可以将一个ListView
控件的内容复制到另一个控件。相反,您应该重构代码,以便将业务逻辑与UI分离。从API获取数据的逻辑和用该数据填充ListView
控件的逻辑应该位于可以由任何形式使用的单独的公共类中。为此,您需要将数据存储在内存中,这种数据结构可以在表单,类和方法之间轻松传递。例如,如果列表中的每个项都可以表示为Atom
类,我建议使用List(Of Atom)
对象来保存数据。例如,你的公共类可能是这样的:
Public Class ShoppingBusiness
Public Function GetData() As List(Of Atom)
' Get data from API and return it as a List(Of Atom) object
End Function
Public Sub LoadList(atoms As List(Of Atom), list As ListView)
' Load the ListView control with the data
End Sub
End Class
一旦业务逻辑被分解为它自己的类,您就可以轻松地从任何形式访问所有逻辑,而无需复制所有代码。但是,在这个示例中,不是同时使用这两种形式,而是调用ShoppingBusiness.GetData
,因为这可能是一种缓慢的方法,您只需要执行一次,然后使用相同的数据来填充ListView
个控件。例如,如果Form1
显示Form2
,则可以这样做:
Public Class Form1
Private _data As List(Of Atom)
Private _business As ShoppingBusiness = New ShoppingBusiness()
Private Sub refreshList()
_data = _business.GetData()
_business.LoadList(_data, ListView1)
End Sub
Private Sub showForm2()
Dim form2 As Form2 = New Form2()
form2.Data = _data
form2.Show()
End Sub
End Class
Public Class Form2
Private _data As List(Of Atom)
Private _business As ShoppingBusiness = New ShoppingBusiness()
Public Property Data() As List(Of Atom)
Get
Return _data
End Get
Set(ByVal value As List(Of Atom))
_data = value
End Set
End Property
Private Sub refreshList()
_business.LoadList(_data, ListView2)
End Sub
End Class
正如您在此示例中所看到的,Form1将在获取数据后将内容中的数据副本保留。它将数据保存在私有_data
字段中。当它创建一个新的Form2
对象时,在它显示它之前,它会为它提供对它已经在内存中的数据的引用。然后,Form2
可以使用相同的LoadList
方法将数据加载到列表中,但它不必再次从API获取数据,因为数据是由{{1 }}