I'd already posted this in microsoft.publi c.dotnet.framew ork.windowsform s
and microsoft.publi c.dotnet.framew ork.windowsform s.controls to no avail so
apologies for the cross-posting.
Hi,
I'm writing a usercontrol which displays the typical two listboxes and the
ability to move items from one to the other.
The listboxes are populated with my custom objects (SwapItem), which simply
have a ValueMember, DisplayMember a couple of other properties and the
tostring function to display the DisplayMember in the listbox.
The issue I'm getting is with the SelectedIndices array
I selected four items in the listbox and then I use:
For i As Int32 = 0 To lstAvailable.Se lectedIndices.C ount - 1
lstItem =
CType(lstAvaila ble.Items.Item( lstAvailable.Se lectedIndices(i )),
SwapListBoxItem )
lstItem.Selecte d = True
intIndex = i
Next
Before execution gets to this, the lstAvailable.Se lectedIndices.c ount
returns 4.
Happy Days.
However when I try to evaluate lstAvailable.Se lectedIndices(0 ) or
lstAvailable.Se lectedIndices(1 ) or lstAvailable.Se lectedIndices(2 ) or
lstAvailable.Se lectedIndices(4 ) i get the error "Index was outside the
bounds of the array".
This can't be true as the.count is 4.
I get exactly the same results using the SelectedItems array to.
Is this a symptom of using my own custom object in the listbox (I've posted
the custom object code below for reference)??
Once the custom object is instantiated and then populated I use this line to
add it to the listbox:
lstAvailable.It ems.Add(SwapIte m)
Also, when I use:
Dim lst As SwapListBoxItem
For Each lst In lstAvailable.Se lectedItems
lstItem.Selecte d = True
Next
The lstAvailable.Se lectedItems.Cou nt returns 4, but the execution doesn't
iterate, just jumps over the For statement.
However, I can use this and it iterates correctly:
Dim lstItem As SwapListBoxItem
For Each lstItem In lstSelected.Ite ms
lstItem.Selecte d = True
Next
So it seems that the items collection can iterate my customer objects but
the selecteditems cannot????
Thanks
Alex
*****Custom Object Code Start******
Public Class SwapListBoxItem
Private m_objValueMembe r As Object = ""
Private m_strDisplayMem ber As String = ""
Private m_bolSelected As Boolean = False
Public Property ValueMember() As Object
Get
Return m_objValueMembe r
End Get
Set(ByVal ValueMember As Object)
m_objValueMembe r = ValueMember
End Set
End Property
Public Property DisplayMember() As String
Get
Return m_strDisplayMem ber
End Get
Set(ByVal DisplayMember As String)
m_strDisplayMem ber = DisplayMember
End Set
End Property
Public Property Selected() As Boolean
Get
Return m_bolSelected
End Get
Set(ByVal Selected As Boolean)
m_bolSelected = Selected
End Set
End Property
Public Sub ChangeSelected( )
m_bolSelected = Not m_bolSelected
End Sub
Public Overrides Function ToString() As String
Return Me.DisplayMembe r
End Function
End Class
*****Custom Object Code End******
and microsoft.publi c.dotnet.framew ork.windowsform s.controls to no avail so
apologies for the cross-posting.
Hi,
I'm writing a usercontrol which displays the typical two listboxes and the
ability to move items from one to the other.
The listboxes are populated with my custom objects (SwapItem), which simply
have a ValueMember, DisplayMember a couple of other properties and the
tostring function to display the DisplayMember in the listbox.
The issue I'm getting is with the SelectedIndices array
I selected four items in the listbox and then I use:
For i As Int32 = 0 To lstAvailable.Se lectedIndices.C ount - 1
lstItem =
CType(lstAvaila ble.Items.Item( lstAvailable.Se lectedIndices(i )),
SwapListBoxItem )
lstItem.Selecte d = True
intIndex = i
Next
Before execution gets to this, the lstAvailable.Se lectedIndices.c ount
returns 4.
Happy Days.
However when I try to evaluate lstAvailable.Se lectedIndices(0 ) or
lstAvailable.Se lectedIndices(1 ) or lstAvailable.Se lectedIndices(2 ) or
lstAvailable.Se lectedIndices(4 ) i get the error "Index was outside the
bounds of the array".
This can't be true as the.count is 4.
I get exactly the same results using the SelectedItems array to.
Is this a symptom of using my own custom object in the listbox (I've posted
the custom object code below for reference)??
Once the custom object is instantiated and then populated I use this line to
add it to the listbox:
lstAvailable.It ems.Add(SwapIte m)
Also, when I use:
Dim lst As SwapListBoxItem
For Each lst In lstAvailable.Se lectedItems
lstItem.Selecte d = True
Next
The lstAvailable.Se lectedItems.Cou nt returns 4, but the execution doesn't
iterate, just jumps over the For statement.
However, I can use this and it iterates correctly:
Dim lstItem As SwapListBoxItem
For Each lstItem In lstSelected.Ite ms
lstItem.Selecte d = True
Next
So it seems that the items collection can iterate my customer objects but
the selecteditems cannot????
Thanks
Alex
*****Custom Object Code Start******
Public Class SwapListBoxItem
Private m_objValueMembe r As Object = ""
Private m_strDisplayMem ber As String = ""
Private m_bolSelected As Boolean = False
Public Property ValueMember() As Object
Get
Return m_objValueMembe r
End Get
Set(ByVal ValueMember As Object)
m_objValueMembe r = ValueMember
End Set
End Property
Public Property DisplayMember() As String
Get
Return m_strDisplayMem ber
End Get
Set(ByVal DisplayMember As String)
m_strDisplayMem ber = DisplayMember
End Set
End Property
Public Property Selected() As Boolean
Get
Return m_bolSelected
End Get
Set(ByVal Selected As Boolean)
m_bolSelected = Selected
End Set
End Property
Public Sub ChangeSelected( )
m_bolSelected = Not m_bolSelected
End Sub
Public Overrides Function ToString() As String
Return Me.DisplayMembe r
End Function
End Class
*****Custom Object Code End******
Comment