2012-07-01 71 views
-1

我有2個VB.Net應用程序中的窗體 在Form1中我有一個Listview元素 我想在Form2中顯示相同的Listview,大小 這樣做的最好方法是什麼? 謝謝在VB.NET中以2種不同的形式顯示相同的listview元素

+0

此任務的哪些部分是您遇到的問題?這是一個WinForm應用程序嗎?數據來自哪裏? –

+0

是它在VB.NET中的winform應用程序,來自谷歌購物API Atom格式的數據,我解析了原子提要並填充了Listview1中的數據,我不是真正的程序員,我想知道是否有內置的功能來顯示當我展示它時,Form1在Form1中的相同Listview就像複製將Listview1粘貼到Form2一樣 – FPGA

回答

0

不,沒有內置的方法將一個ListView控件的內容複製到另一個。相反,您應該重構您的代碼,以便業務邏輯與UI分離。從API獲取數據的邏輯以及用該數據填充控制的邏輯都應該位於可以由任何形式使用的單獨的公共類中。爲了做到這一點,您需要將數據存儲在某種形式,類和方法之間的數據結構中。例如,如果列表中的每個項目都可以表示爲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再次因爲數據被Form1給它來獲取數據。

相關問題