-1

Form1 の VB.Net アプリに 2 つのフォームがあります Listview 要素があります Form2 に同じ Listview を表示したいのですが、サイズが異なりますが、これを行う最善の方法は何ですか? ありがとう

4

1 に答える 1

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

ビジネス ロジックがそのような独自のクラスに分割されると、そのコードをすべて複製することなく、任意のフォームからすべてのロジックに簡単にアクセスできます。ただし、両方のフォーム (この例では call ) を使用するのではなく、これは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

于 2012-07-02T02:27:54.060 に答える