2012-02-24 3 views
1

私はVB.NETを絶対に新しくしています。vb.netの配列リストはロードされません

私はMVPシステムを作成しようとしていますが、システムを通じてアレイを定義してロードしようとしています。それからそれを読んで、それはListView1オブジェクトを入力する必要があります。

誰もそれがなぜ入力されないのかを光らせてくれますか?私はコンソールが正しく設定されていると私に伝えているので、彼らは正しく設定されていることを知っている。

アイテムを追加するたびにサンプルが同じアイテム(正確には1週間)で埋められることがわかっていますが、それはポイントではありません。

また、インデックスなしで配列を定義することは可能ですが、今は(6)で設定して文字列の6ブロックを設定するようにしましたが、より柔軟にしたいと考えています。

は、PHP例えば $項目[ "ファーストネーム"] $アイテム[ "姓"] のような方法は...あなたの時間と労力のため

おかげで、あなたをそこです! :-)

ClientlistItem.vb(実際の項目の定義)

Public Class ClientlistItem 

    Private entry(6) As String 

    Public Sub New(ByVal iEntry() As String) 
     entry(0) = iEntry(0) 
     entry(1) = iEntry(1) 
     entry(2) = iEntry(2) 
     entry(3) = iEntry(3) 
     entry(4) = iEntry(4) 
     entry(5) = iEntry(5) 
    End Sub 

End Class 

ClientList.vb(いわばモデル)

輸入System.Collections.Generic

Public Class Clientlist 
    Public Event ClientlistChanged() 
    Private mItems As List(Of ClientlistItem) = New List(Of ClientlistItem) 

    Public ReadOnly Property Items() As List(Of ClientlistItem) 
     Get 
      Return mItems 
     End Get 
    End Property 


    Public Sub AddItem(ByRef iEntry() As String) 
     Console.WriteLine(iEntry(0)) 

     Dim item As ClientlistItem = New ClientlistItem(iEntry) 
     mItems.Add(item) 
     RaiseEvent ClientlistChanged() 
    End Sub 
End Class 

クライアントリストプレゼンター.vb(発表者)

Public Class ClientlistPresenter 
    Private iEntry() As String 
    Private mClientlistModel As Clientlist 
    Private mClientlistView As ClientlistView 

    Public Sub New(ByRef view As ClientlistView) 
     mClientlistModel = New Clientlist 
     mClientlistView = view 
     mClientlistView.Init(mClientlistModel, Me) 
    End Sub 

    Public Sub AddItem(ByVal iEntry() As String) 
     mClientlistModel.AddItem(iEntry) 
    End Sub 
End Class 

ClientlistView.vb(ビューが..これは私が記入したいリストビューを持っている)

Imports System.Windows.Forms 

Public Class ClientlistView 
    Private mClientlistPresenter As ClientlistPresenter 
    Private WithEvents mClientlistModel As Clientlist 

    Private Sub OrderView_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     mClientlistPresenter = New ClientlistPresenter(Me) 
    End Sub 

    Private Sub Orderview_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Resize 

     Dim fWidth As Integer = Me.Width 
     Dim fHeight As Integer = Me.Height 
     ListView1.Bounds = New Rectangle(New Point(0, 25), New Size(fWidth, fHeight)) 
    End Sub 

    Public Sub Init(ByRef model As Clientlist, ByRef presenter As ClientlistPresenter) 

     mClientlistPresenter = presenter 
     mClientlistModel = model 


     ' Set the view to show details. 
     listView1.View = View.Details 
     ' Allow the user to rearrange columns. 
     listView1.AllowColumnReorder = True 
     ' Display check boxes. 
     listView1.CheckBoxes = True 
     ' Select the item and subitems when selection is made. 
     listView1.FullRowSelect = True 
     ' Display grid lines. 
     listView1.GridLines = True 
     ' Sort the items in the list in ascending order. 
     listView1.Sorting = SortOrder.Ascending 
     ListView1.Columns.Add("#", 40, HorizontalAlignment.Left) 
     ListView1.Columns.Add("Wholename", 140, HorizontalAlignment.Left) 
     ListView1.Columns.Add("Date of birth", 80, HorizontalAlignment.Left) 
     listView1.Columns.Add("Country of birth", -2, HorizontalAlignment.Center) 

     ' Add the ListView to the control collection. 
     Me.Controls.Add(listView1) 


    End Sub 

    Private Sub ClientlistChanged() Handles mClientlistModel.ClientlistChanged 


     ListView1.Items.Clear() 
     Dim i As Object 
     For Each i In mClientlistModel.Items() 

     Next 

    End Sub 

    Public Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Dim week(6) As String 
     week(0) = "Sunday" 
     week(1) = "Monday" 
     week(2) = "Tuesday" 
     week(3) = "Wednesday" 
     week(4) = "Thursday" 
     week(5) = "Friday" 
     week(6) = "Saturday" 

     mClientlistPresenter.AddItem(week) 

    End Sub 

End Class 
+0

ここで、あなたのコードで、ListViewに正確に値を設定しようとしていますか? –

答えて

2

Clientlist.AddItemで「新ClientlistItem(iEntry)」呼び出しを介して、あなたはにiEntry要素を入れていますプライベートClientlistItem.entryメンバClientListItemの外で「プライベートエントリ(6)As String」のデータをどのようにアクセス可能にする予定ですか?

一つの解決策は、ClientlistItemの内部でプロパティを作成することです:

Public ReadOnly Property Items As String() 
    Get 
     Return entry 
    End Get 
End Property 

値がで取得しに滞在していることを確認するために、最後にあなたのButton1関数の中でこれを置く:

For i As Integer = 0 To mClientlistModel.Items.Count - 1 
     For j As Integer = 0 To mClientlistModel.Items(i).Items.Count - 1 
      Debug.Print(String.Format("item({0},{1})=", i, j) + mClientlistModel.Items(i).Items(j)) 
     Next 
    Next 
    Stop 

IDEの「即時」ウィンドウには、次のような内容が表示されます。

item(0,0)=Sunday 
item(0,1)=Monday 
item(0,2)=Tuesday 
item(0,3)=Wednesday 
item(0,4)=Thursday 
item(0,5)=Friday 
item(0,6)= 

Th上記のリストはボタンをクリックする度に大きくなるはずです。

希望すると便利です。

+1

それにもかかわらず、 "Public ReadOnly Property Items As String()"は要素の変更を許可することに注意してください。あなたが本当にそれらを読み取り専用にしたいのであれば、 "パブリックReadOnlyプロパティ項目(インデックスとして整数)を文字列"とし、 "Public ReadOnly Property Count As Integer"を作成する必要があります。 – rskar

関連する問題