英文:
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论