multiselect listbox backcolor

R

Russ

I have a form with several textboxes, comboboxes and multiselect listboxes.
I would like to change the backcolor of each without changing the value in
each. A simple statement like:
Me.textbox1.backcolor = VbRed changes the backcolor of textboxes without
changing the textbox.value
Me.combobox1.backcolor = VbRed changes the backcolor of comboxes without
changing the combobox.value
However, Me.listbox1.backcolor = VbRed changes the backcolor of multiselect
listboxes but also resets the listbox1 to no selections.

Does anyone know a way to change the color of a multiselect listbox and keep
its selections without a lot of code to remember the array settings?
 
D

Dave Peterson

Not too much code:

Option Explicit
Private Sub CommandButton1_Click()
Dim myArr() As Boolean
Dim iCtr As Long
ReDim myArr(0 To Me.ListBox1.ListCount - 1)

For iCtr = 0 To Me.ListBox1.ListCount - 1
myArr(iCtr) = Me.ListBox1.Selected(iCtr)
Next iCtr
Me.ListBox1.BackColor = vbRed

For iCtr = 0 To Me.ListBox1.ListCount - 1
Me.ListBox1.Selected(iCtr) = myArr(iCtr)
Next iCtr

End Sub
'for testing
Private Sub UserForm_Initialize()
Dim iCtr As Long
With Me.ListBox1
.MultiSelect = fmMultiSelectMulti
For iCtr = 1 To 10
.AddItem iCtr
Next iCtr
End With
End Sub
 
J

Jim Rech

Does anyone know a way to change the color of a multiselect listbox and
No, but it's not that much code to get and set the selected items:

Dim SelectedArray() As Integer

Private Sub UserForm_Initialize()
Dim x As Integer
For x = 1 To 10
Me.ListBox1.AddItem x
Next
End Sub

Private Sub CommandButton1_Click()
SetSelectedArray
Me.ListBox1.BackColor = vbRed
ResetListboxSelectedItems
End Sub

Sub SetSelectedArray()
Dim Counter As Integer, ArrayCounter As Integer
Erase SelectedArray
For Counter = 1 To Me.ListBox1.ListCount
If Me.ListBox1.Selected(Counter - 1) Then
ArrayCounter = ArrayCounter + 1
ReDim Preserve SelectedArray(1 To ArrayCounter)
SelectedArray(ArrayCounter) = Counter - 1
End If
Next
End Sub

Sub ResetListboxSelectedItems()
Dim Counter As Integer
For Counter = 1 To UBound(SelectedArray)
Me.ListBox1.Selected(SelectedArray(Counter)) = True
Next
End Sub


--
Jim
|I have a form with several textboxes, comboboxes and multiselect listboxes.
| I would like to change the backcolor of each without changing the value in
| each. A simple statement like:
| Me.textbox1.backcolor = VbRed changes the backcolor of textboxes without
| changing the textbox.value
| Me.combobox1.backcolor = VbRed changes the backcolor of comboxes without
| changing the combobox.value
| However, Me.listbox1.backcolor = VbRed changes the backcolor of
multiselect
| listboxes but also resets the listbox1 to no selections.
|
| Does anyone know a way to change the color of a multiselect listbox and
keep
| its selections without a lot of code to remember the array settings?
|
| --
| russ
 
R

Russ

Thanks Dave - that does the trick.
--
russ


Dave Peterson said:
Not too much code:

Option Explicit
Private Sub CommandButton1_Click()
Dim myArr() As Boolean
Dim iCtr As Long
ReDim myArr(0 To Me.ListBox1.ListCount - 1)

For iCtr = 0 To Me.ListBox1.ListCount - 1
myArr(iCtr) = Me.ListBox1.Selected(iCtr)
Next iCtr
Me.ListBox1.BackColor = vbRed

For iCtr = 0 To Me.ListBox1.ListCount - 1
Me.ListBox1.Selected(iCtr) = myArr(iCtr)
Next iCtr

End Sub
'for testing
Private Sub UserForm_Initialize()
Dim iCtr As Long
With Me.ListBox1
.MultiSelect = fmMultiSelectMulti
For iCtr = 1 To 10
.AddItem iCtr
Next iCtr
End With
End Sub
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top