亲爱的,并提前感谢你。
问题:
而不是列表A和列表B有两个下拉框。我想组合两个列表(它们确实相关)并将它们显示给用户作为1列表。然后将其拆分为两个,以便我可以存储相关信息。
清单1
Machines
1. Machine x
2. Machine y
列出2个测试类型
1. Test Type ab
2. Test Type ac
3. Text Type ad.
所以机器1可以测试类型ab和ac。机器2可以进行测试类型ac和ad。
它将存储在3个不同的表中(不是真的,只是认为它会)。 2个表将包含列表,第三个表将包含两个列表之间的关系。即列表1中的哪些项目与列表2中的哪些项目配对等。
对于用户,它将显示如下
Machine X - ab
Machine x - ac
Machine y - ac
Machine y - ad
然后,用户将从列表中选择1,然后我将解码所选的两个项目。
到目前为止,我的想法是根据需要使用位(和/或)。
将有三个功能
public function joinAB(a as long, b as long) as long
end function
Public function getA(ab as long) as long
end function
public function getB(ab as long)as long
end function
所以,只是为了澄清这不是将文本连接在一起,而是加入/拆分这两个列表中各个项目的ID。
其他人有任何其他想法。这将在我继承的遗留系统(VB6)中完成。我的VB6编码技能高于平均水平。
感谢您提供的任何帮助/代码段或一般建议。
如果您需要更多信息,请告诉我们。
答案 0 :(得分:1)
使用映射关系的第3个表,如果关系具有唯一ID,则可以使用它来加入/拆分列表....
或向我们提供表格结构和数据......
答案 1 :(得分:1)
可能有一些解决方案。
最简单的方法是在连接表上创建唯一的32位整数字段。然后可以将其嵌入VB6 ListBox的ItemData属性中。
为此提供了几个辅助函数:
Private Sub AddListBoxItem(ByRef lst as ListBox, ByVal in_nKey As Long, ByRef in_sDisplay As String)
With lst
.AddItem in_sDisplay
.ItemData(.NewIndex) = in_nKey
End With
End Sub
Private Function GetSelectedListBoxKey(ByRef in_lst As ListBox) As Long
With in_lst
GetSelectedListBoxKey = .ItemData(.ListIndex)
End With
End Function
至于实现你的功能,我只想使用两个集合。
m_col_A_B_to_AB将由A& A键入“_”& B返回AB。 m_col_AB_to_A_B将键入AB以返回A和B.
辅助函数将是:
Private Sub AddRow(ByVal in_nA As Long, ByVal in_nB As Long, ByVal in_nAB As Long)
Dim an(0 To 1) As Long
an(0) = in_nA
an(1) = in_nB
m_col_A_B_to_AB.Add an(), CStr(in_nAB)
m_col_AB_to_A_B.Add in_nAB, CStr(in_nA) & "_" & CStr(in_nB)
End Sub
Private Sub Get_A_B(ByVal in_nAB As Long, ByRef out_nA As Long, ByRef out_nB As Long)
Dim vTmp As Variant
vTmp = m_col_A_B_to_AB.Item(CStr(in_nAB))
out_nA = vTmp(0)
out_nB = vTmp(1)
End Sub
Private Function GetA(ByVal in_nAB As Long) As Long
Get_A_B in_nAB, GetA, 0&
End Function
Private Function GetB(ByVal in_nAB As Long) As Long
Get_A_B in_nAB, 0&, GetB
End Function
Private Function JoinAB(ByVal in_nA As Long, ByVal in_nB As Long) As Long
JoinAB = m_col_AB_to_A_B.Item(CStr(in_nA) & "_" & CStr(in_nB))
End Function
答案 2 :(得分:1)
假设a和b是数字变量,因为你的3个函数建议我将使用组合列表中项目的.ItemData()属性,就像标记和使用除法一样,并保留以获得单独的部分:
Public Function joinAB(a As Long, b As Long) As Long
joinAB = a * 100 + b
End Function
Public Function getA(ab As Long) As Long
getA = ab \ 100
End Function
Public Function getB(ab As Long) As Long
getB = ab Mod 100
End Function
这假设b永远不会高于100,并且a或b都不会为负
如果a和b是字符串变量,那么我会将连接的字符串显示为组合框中的文本并拆分所选文本以获得单独的部分
Public Function joinAB(a As String, b As String) As String
joinAB = a & " - " & b
End Function
Public Function getA(ab As String) As String
getA = Left$(ab, InStr(ab, " - ") - 1)
End Function
Public Function getB(ab As String) As String
getB = Mid$(ab, InStr(ab, " - ") + 3)
End Function