在VB.NET中以2种不同的形式显示相同的listview元素

时间:2012-07-01 20:04:22

标签: vb.net listview

我在VB.Net应用程序中有2个表单 在Form1中我有一个Listview元素 我想在Form2中显示相同的Listview,但具有不同的大小 做这个的最好方式是什么? 感谢

1 个答案:

答案 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 }}