我有一个列表框和代码,以确保它(和其他元素)被选中。我在代码中添加了一个ELSE,这样如果ListBox有一个选定的项目,它会将背景颜色更改为白色。如果先前尝试的条目是重复的(将BG更改为红色),则需要进行此操作,但更容易将其设为默认值。
我的comboBox和textBox不这样做。知道我可以做些什么不同以便只有Initialize函数清除它吗?
谢谢,
以下是清除listBox所选项目的代码段。评论上面的行似乎是造成这种情况。
编辑:每次更改背景颜色时都会取消选择。当我导致重复时,它也会取消选择,这不会改变背景颜色。因此,在许多情况下,列表框会自行取消选择。如果我能找到其中一个的原因(其中两个列在这里),那么也许我可以解决第三个问题。
Function HighlightEmpty(ByVal nameSelect As Boolean, ByVal comboSelect As Boolean, ByVal listSelect As Boolean) As Boolean
' Highlight empty fields
If Not nameSelect Then
Enter_New_DTC_Form.SignalNameTxtBox.BackColor = RGB(255, 0, 0)
Else
Enter_New_DTC_Form.SignalNameTxtBox.BackColor = RGB(255, 255, 255)
End If
If Not comboSelect Then
Enter_New_DTC_Form.ComboBox1.BackColor = RGB(255, 0, 0)
Else
Enter_New_DTC_Form.ComboBox1.BackColor = RGB(255, 255, 255)
End If
If Not listSelect Then
Enter_New_DTC_Form.ListBox1.BackColor = RGB(255, 0, 0)
Else
**'This is where it breaks**
Enter_New_DTC_Form.ListBox1.BackColor = RGB(255, 255, 255)
End If
' Set focus to first empty field on form
If Not nameSelect Then
Enter_New_DTC_Form.SignalNameTxtBox.SetFocus
ElseIf Not comboSelect Then
Enter_New_DTC_Form.ComboBox1.SetFocus
ElseIf Not listSelect Then
Enter_New_DTC_Form.ListBox1.SetFocus
End If
' Return boolean to trigger message
HighlightEmpty = Not nameSelect Or Not comboSelect Or Not listSelect
End Function
答案 0 :(得分:2)
我发现原帖已超过2年,但由于我使用Excel 2013和VBA 7.1遇到了这个问题,因此它仍然具有相关性。在编码方面,我只是一个业余爱好者,但我想出了以下代码作为解决方法。
此代码将在数据经过验证后使用,并且您已准备好进入下一步。
您最终找到所选列表项的索引,向其添加1,将所选列表项设置为 next / previous 项,然后将其设置回实际项。我不知道为什么这是必要的,但它确实有效。
package main
import (
"fmt"
"math"
)
func pow(x, n, lim float64) float64 {
v float64 = math.Pow(x,n) // line 9
if v<lim {
return v
} else {
fmt.Printf("%g >= %g\n", v, lim)
}
return lim
}
func main() {
fmt.Println(
pow(3, 2, 10),
pow(3, 2, 20),
)
}
希望这会有所帮助。我花了很多时间研究,找不到根本原因的解决方案,但在我自己的电子表格中实现了这个代码。
答案 1 :(得分:0)
可能的解决方案是存储选择,更改BackColor然后重新应用选择;
Public Sub UpdateBackgroundColor()
Dim sel() As Boolean: sel = GetSelectedIndexs()
list_box.BackColor = &H80000005
SetSelectedIndexs sel
End Sub
Private Function GetSelectedIndexs() As Boolean()
If list_box.ListCount > 0 Then
ReDim sel(0 To list_box.ListCount - 1) As Boolean
Dim i As Integer
For i = 0 To list_box.ListCount - 1
sel(i) = list_box.Selected(i)
Next
GetSelectedIndexs = sel
Else
ReDim GetSelectedIndexs(0)
End If
End Function
Private Function SetSelectedIndexs(sel() As Boolean)
Dim i As Integer
For i = LBound(sel) To UBound(sel)
list_box.Selected(i) = sel(i)
Next
End Function