A
Alex Stevens
I'd already posted this in microsoft.public.dotnet.framework.windowsforms
and microsoft.public.dotnet.framework.windowsforms.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.SelectedIndices.Count - 1
lstItem =
CType(lstAvailable.Items.Item(lstAvailable.SelectedIndices(i)),
SwapListBoxItem)
lstItem.Selected = True
intIndex = i
Next
Before execution gets to this, the lstAvailable.SelectedIndices.count
returns 4.
Happy Days.
However when I try to evaluate lstAvailable.SelectedIndices(0) or
lstAvailable.SelectedIndices(1) or lstAvailable.SelectedIndices(2) or
lstAvailable.SelectedIndices(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.Items.Add(SwapItem)
Also, when I use:
Dim lst As SwapListBoxItem
For Each lst In lstAvailable.SelectedItems
lstItem.Selected = True
Next
The lstAvailable.SelectedItems.Count 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.Items
lstItem.Selected = 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_objValueMember As Object = ""
Private m_strDisplayMember As String = ""
Private m_bolSelected As Boolean = False
Public Property ValueMember() As Object
Get
Return m_objValueMember
End Get
Set(ByVal ValueMember As Object)
m_objValueMember = ValueMember
End Set
End Property
Public Property DisplayMember() As String
Get
Return m_strDisplayMember
End Get
Set(ByVal DisplayMember As String)
m_strDisplayMember = 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.DisplayMember
End Function
End Class
*****Custom Object Code End******
and microsoft.public.dotnet.framework.windowsforms.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.SelectedIndices.Count - 1
lstItem =
CType(lstAvailable.Items.Item(lstAvailable.SelectedIndices(i)),
SwapListBoxItem)
lstItem.Selected = True
intIndex = i
Next
Before execution gets to this, the lstAvailable.SelectedIndices.count
returns 4.
Happy Days.
However when I try to evaluate lstAvailable.SelectedIndices(0) or
lstAvailable.SelectedIndices(1) or lstAvailable.SelectedIndices(2) or
lstAvailable.SelectedIndices(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.Items.Add(SwapItem)
Also, when I use:
Dim lst As SwapListBoxItem
For Each lst In lstAvailable.SelectedItems
lstItem.Selected = True
Next
The lstAvailable.SelectedItems.Count 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.Items
lstItem.Selected = 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_objValueMember As Object = ""
Private m_strDisplayMember As String = ""
Private m_bolSelected As Boolean = False
Public Property ValueMember() As Object
Get
Return m_objValueMember
End Get
Set(ByVal ValueMember As Object)
m_objValueMember = ValueMember
End Set
End Property
Public Property DisplayMember() As String
Get
Return m_strDisplayMember
End Get
Set(ByVal DisplayMember As String)
m_strDisplayMember = 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.DisplayMember
End Function
End Class
*****Custom Object Code End******