2012-04-30 22 views
0

複数のフォームを使用して、グローバル変数と配列のモジュールとしてリストボックスから別のリストボックスにデータをコピーしようとして問題があります。この時点で、セカンダリリストボックスを選択してアイテムを作成し、それをメインリストボックスに送信しようとすると、配列の範囲外にあることがわかります。私はこれを行うためのあらゆる方法について試してきましたが、まだ解決方法を考え出していません。私はそれがおそらくまだ私に当たっていないことは明らかであることは分かっています。1つのリストボックスから別のフォームに別のリストボックスにデータをコピーしようとしています

これは私が私のメインフォーム内のリストボックスがlstShoppingCart

と呼ばれている。これは私が移入方法ですと、ボタンのクリック操作を試してみ

Public mp3Albums() As String = {" Tres Hombres ZZ TOP ", " Fandango! ZZ TOP ", " Soul Kiss Tom Duda ", " Instrumental Telepathy Tom Duda ", " Dark Side of the Moon Pink Floyd ", " Seventh Sojourn Moody Blues ", " In Search of the lost Chord Moody Blues "} 

と私の二次リストボックスを移入するために私の配列を開始する方法ですデータをメインリストボックスにコピーします。コピーしようとしている2番目のデータセットの呼び出しを無視します.1つしかコピーできない場合、タイトルと価格の2つのセットをコピーしようとするビジネスはありません。それは私が

Dim frmMain As New MainForm 
frmMain.lstShoppingCart.Items.Add("A" & lstVinylAlbum.SelectedIndex & ": " & lstVinylAlbum.SelectedItem.ToString) 
+0

正確なエラーメッセージはどうなりますか? –

+0

私は推測しましたが、まずDim frmMainステートメントの前に "MsgBox lstVinylAlbum.SelectedItems.Count"を挿入してデバッグしようとします。それを実行して、msgboxがポップアップするものを教えてください。 – APrough

答えて

1
を考えていたよりも簡単ですしない限り、リストボックス内の項目を表す小さなクラスでオフに開始し

Public Class ListItem 

    Private _key As String = String.Empty 
    Private _value As String = String.Empty 

    Public Sub New(ByVal key As String, ByVal value As String) 

     _key = key 
     _value = value 

    End Sub 

    Public ReadOnly Property Key() As String 
     Get 
      Return _key 
     End Get 
    End Property 

    Public ReadOnly Property Value() As String 
     Get 
      Return _value 
     End Get 
    End Property 

    ' Prevents the object type from displaying in the list box. 
    Public Overrides Function ToString() As String 

     Return _value 

    End Function 

End Class 

それでは、一つの形態(lstLeftとlstRight)上の2つのリストボックスオブジェクトを想定してみましょう、 2つのボタンで - つの項目を移動する項目の権利と1を移動するには、左:

Public Class Form1 

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

     InitData() 

    End Sub 

    Private Sub InitData() 

     With lstLeft.Items 

      .Add(New ListItem("1", "Tres Hombres ZZ TOP")) 
      .Add(New ListItem("2", "Fandango! ZZ TOP")) 
      .Add(New ListItem("3", "Soul Kiss Tom Duda")) 
      .Add(New ListItem("4", "Instrumental Telepathy Tom Duda")) 

     End With 

    End Sub 

    Private Sub btnMoveRight_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMoveRight.Click 

     If lstLeft.SelectedItem IsNot Nothing Then 

      Dim selectedItem As ListItem = DirectCast(lstLeft.SelectedItem, ListItem) 

      lstRight.Items.Add(selectedItem) 
      lstLeft.Items.Remove(selectedItem) 

     End If 

    End Sub 

    Private Sub btnMoveLeft_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMoveLeft.Click 

     If lstRight.SelectedItem IsNot Nothing Then 

      Dim selectedItem As ListItem = DirectCast(lstRight.SelectedItem, ListItem) 

      lstLeft.Items.Add(selectedItem) 
      lstRight.Items.Remove(selectedItem) 

     End If 

    End Sub 

End Class 

を何これは単に「その他」のリストボックスに、選択したListItemオブジェクトへの参照を追加してやっている、とremovin g現在のListBoxから選択されたListItemオブジェクトへの参照。これを2つのフォームに分けたい場合は、それぞれのフォームにPublic Property AddToList(item As ListItem)関数が必要です。最初に、そのフォームのListBoxに追加するために、逆のフォームの関数を呼び出して、ListItemオブジェクトを現在のフォームから削除します。

+0

これで私は協力できるいくつかの助けを得ました。ありがとう、トン。私はいくつかのことについてこれを研究し、練習目的を探すことなくこのすべてを援助しようとします。そして病気はあなたに戻って、自分のコードのうち、私が作業しなければならない標準ではないかもしれない部分があるかどうかを確かめます。学期は終わりですが、私は間違いを訂正することに決めました。再度、感謝します –

関連する問題