英文:
How do I get combo boxes to become invisible when the selection is no longer selected in a multiselect list box?
问题
我有一个多选列表框(nameDatabase),当我选择一个选项时,会出现一个组合框,我可以使用它。然而,当我取消选择它时,组合框仍然可见,尽管已取消选择。
这是我目前的代码,用于使它们可见并将选定的项目放入文本框中:
Private Sub nameDatabase_AfterUpdate()
Dim strEng As String
Dim varItem As Variant
For Each varItem In Me.nameDatabase.ItemsSelected
strEng = strEng & ", " & Me.nameDatabase.ItemData(varItem)
Next
If Len(strEng) > 0 Then
strEng = Mid(strEng, 2)
End If
Me.TestBox = strEng
If nameDatabase.Column(Value) = "A" Then
codeJBox.Visible = True
ElseIf nameDatabase.Column(Value) = "B" Then
codeSBox.Visible = True
ElseIf nameDatabase.Column(Value) = "C" Then
codePBox.Visible = True
codeABox.Visible = True
End If
End Sub
我尝试过在一个文本框中放置所选内容,并且如果,例如,“A”不在其中,它将消失,但是它没有起作用,或者我做错了什么。我有一种感觉,我可能是在寻找使组合框消失的一些简单方法,而且我可能过于复杂化了一切。
英文:
I have a multiselect list box (nameDatabase) that when I select an option, a combo box will appear, and I can use it. However, when I unselect it, the combo box stays visible after it is unselected.
This is what I currently have to make them visible and place the items selected to a text box:
Private Sub nameDatabase_AfterUpdate()
Dim strEng As String
Dim varItem As Variant
For Each varItem In Me.nameDatabase.ItemsSelected
strEng = strEng & ", " & Me.nameDatabase.ItemData(varItem)
Next
If Len(strEng) > 0 Then
strEng = Mid(strEng, 2)
End If
Me.TestBox = strEng
If nameDatabase.Column(Value) = "A" Then
codeJBox.Visible = True
ElseIf nameDatabase.Column(Value) = "B" Then
codeSBox.Visible = True
ElseIf nameDatabase.Column(Value) = "C" Then
codePBox.Visible = True
codeABox.Visible = True
End If
End Sub
I have tried to have a text box have the selections in it and if, for example, "A" is not in there it will go away though it didn't work, or I did something wrong. I have a feeling it is something simple I'm missing to make the combo box disappear and that I'm overthinking everything.
答案1
得分: 0
你可以最初将它们全部隐藏:
codeJBox.Visible = False
codeSBox.Visible = False
codePBox.Visible = False
codeABox.Visible = False
如果 nameDatabase.Column(Value) = "A" Then
codeJBox.Visible = True
ElseIf nameDatabase.Column(Value) = "B" Then
codeSBox.Visible = True
ElseIf nameDatabase.Column(Value) = "C" Then
codePBox.Visible = True
codeABox.Visible = True
End If
英文:
You could initially hide them all:
codeJBox.Visible = False
codeSBox.Visible = False
codePBox.Visible = False
codeABox.Visible = False
If nameDatabase.Column(Value) = "A" Then
codeJBox.Visible = True
ElseIf nameDatabase.Column(Value) = "B" Then
codeSBox.Visible = True
ElseIf nameDatabase.Column(Value) = "C" Then
codePBox.Visible = True
codeABox.Visible = True
End If
答案2
得分: 0
以下是翻译好的部分:
这应该适用于您的用例(如果没有,请参见编辑):
Private Sub nameDatabase_Change()
Dim Value As Long
'Value = 1 '用于测试
If nameDatabase.Text <> "" Then
codeJBox.Visible = nameDatabase.Column(Value) = "A"
codeSBox.Visible = nameDatabase.Column(Value) = "B"
codePBox.Visible = nameDatabase.Column(Value) = "C"
codeABox.Visible = nameDatabase.Column(Value) = "C"
Else
codeJBox.Visible = False
codeSBox.Visible = False
codePBox.Visible = False
codeABox.Visible = False
End If
End Sub
如果没有选择任何内容,它会将这4个项目保持不可见,而在输入内容时,只会使您需要的项目可见。如果有不清楚的地方,请告诉我。
编辑:
看来我误解了您的问题,以为这是普通的列表框/组合框,而实际上是Access中的一个。因此,我无法进一步测试,但您可以尝试以下代码,它仍然应该有效。如果不行,请告诉我。
Private Sub nameDatabase_AfterUpdate()
Dim strEng As String
Dim varItem As Variant
For Each varItem In Me.nameDatabase.ItemsSelected
If Len(strEng) = 0 Then
strEng = Me.nameDatabase.ItemData(varItem)
Else
strEng = strEng & ", " & Me.nameDatabase.ItemData(varItem)
End If
Next varItem
Me.TestBox = strEng
codeJBox.Visible = InStr(strEng, "A") > 0
codeSBox.Visible = InStr(strEng, "B") > 0
codePBox.Visible = InStr(strEng, "C") > 0
codeABox.Visible = InStr(strEng, "C") > 0
End Sub
英文:
This should work for your use-case (it didn't, see edit):
Private Sub nameDatabase_Change()
Dim Value As Long
'Value = 1 'was for testing
If nameDatabase.Text <> "" Then
codeJBox.Visible = nameDatabase.Column(Value) = "A"
codeSBox.Visible = nameDatabase.Column(Value) = "B"
codePBox.Visible = nameDatabase.Column(Value) = "C"
codeABox.Visible = nameDatabase.Column(Value) = "C"
Else
codeJBox.Visible = False
codeSBox.Visible = False
codePBox.Visible = False
codeABox.Visible = False
End If
End Sub
It turns the 4 invisible if nothing is selected and when something is typed only makes the ones you need visible. Let me know if something is unclear.
EDIT:
It appears I mistook your question for a normal listbox/combobox, not one from access. As such I can't test this further but you can try the following code which should still work. Let me know if it doesn't.
Private Sub nameDatabase_AfterUpdate()
Dim strEng As String
Dim varItem As Variant
For Each varItem In Me.nameDatabase.ItemsSelected
If Len(strEng) = 0 Then
strEng = Me.nameDatabase.ItemData(varItem)
Else
strEng = strEng & ", " & Me.nameDatabase.ItemData(varItem)
End If
Next varItem
Me.TestBox = strEng
codeJBox.Visible = InStr(strEng, "A") > 0
codeSBox.Visible = InStr(strEng, "B") > 0
codePBox.Visible = InStr(strEng, "C") > 0
codeABox.Visible = InStr(strEng, "C") > 0
End Sub
答案3
得分: 0
很难确定以下内容是否能满足您的要求,而不看到 Sub 所处的更广泛上下文,特别是对于 Value
,然而,您可以尝试以下方法,它不仅会在选择适当时使 ComboBox 可见,还会在选择不适当时隐藏它们:
Private Sub nameDatabase_AfterUpdate()
Dim strEng As String
Dim varItem As Variant
For Each varItem In Me.nameDatabase.ItemsSelected
strEng = strEng & ", " & Me.nameDatabase.ItemData(varItem)
Next
If Len(strEng) > 0 Then
strEng = Mid(strEng, 2)
End If
Me.TestBox = strEng
codeJBox.Visible = Me.nameDatabase.Column("Value") = "A"
codeSBox.Visible = Me.nameDatabase.Column("Value") = "B"
codePBox.Visible = Me.nameDatabase.Column("Value") = "C"
codeABox.Visible = Me.nameDatabase.Column("Value") = "C"
End Sub
... 我必须提到,如果没有更广泛的代码基础来测试这段代码,我无法测试它的运行情况。
英文:
It's still difficult to tell whether the following will do what you want without seeing the wider context the Sub is in, especially for Value
, however, you could try this which doesn't just make the ComboBoxes visible if the selection is appropriate, but also hides them if the selection is not appropriate
Private Sub nameDatabase_AfterUpdate()
Dim strEng As String
Dim varItem As Variant
For Each varItem In Me.nameDatabase.ItemsSelected
strEng = strEng & ", " & Me.nameDatabase.ItemData(varItem)
Next
If Len(strEng) > 0 Then
strEng = Mid(strEng, 2)
End If
Me.TestBox = strEng
codeJBox.Visible = nameDatabase.Column(Value) = "A"
codeSBox.Visible = nameDatabase.Column(Value) = "B"
codePBox.Visible = nameDatabase.Column(Value) = "C"
codeABox.Visible = nameDatabase.Column(Value) = "C"
End Sub
... I have to mention that I have not been able to test this code without having the wider code-base to work it within.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论