1

我有一段代码如下

public Test As Dictionary(Of String, String())

哪个被带进来

tester = New Dictionary(Of String, String())
tester.add("Key_EN", {"Option 1_EN", "Option 2_EN", "Option 3_EN"})
tester.add("Key_FR", {"Option 1_FR", "Option 2_FR", "Option 3_FR"})
tester.add("Key_DE", {"Option 1_DE", "Option 2_DE", "Option 3_DE"})

然后是一个组合框,如下所示

dim Language as string
Language = "_EN" ' note this is done by a drop down combo box to select _EN or _FR etc.
cboTestBox.items.AddRange(tester("Key" & Language))

我需要做的是查看答案所在的索引位置并将其转换回 Key_EN。

因此,例如选择_DE,则会显示“Option 1_DE”、“Option 2_DE”、“Option 3_DE”的选项。如果他们选择了 Option 3_DE,那么我需要能够将其转换为 Option 3_EN。

非常感谢莫迪斯

4

2 回答 2

1

您无法真正获得字典条目的索引,即使您这样做了,也对您没有多大好处,因为您无法使用它来访问键或值(我花了很多时间尝试绕过这个无济于事)。

最简单的选择是构建一个反向查找字典,组合键值映射回顶级键,假设组合值都是唯一的:

    Dim oReverseLookup As New Dictionary(Of String, String)

    For Each sKey As String In Tester.Keys
        For Each sValue As String In Tester(sKey)
            oReverseLookup.Add(sValue, sKey)
        Next
    Next

然后,当您选择组合值时,您可以取回原始密钥:

    Dim sSelectedComboValue As String
    sSelectedComboValue = "Option 3_DE"

    If oReverseLookup.ContainsKey(sSelectedComboValue) Then
        ' This will print Key_DE
        Debug.Print("Master Key Value " & oReverseLookup(sSelectedComboValue))
    End If
于 2013-06-24T00:29:52.797 回答
0

您可以从组合框中获取值并解析字符串。您知道它将_在您要更改的部分之前包含一个。因此,只需处理字符串以找到之前的数值_,然后Option X_EN通过替换X或可能将其连接到另一个字符串中Optionand _EN

但是你正在尝试做的似乎是一种非常人为的方式来做到这一点......

于 2013-06-23T23:48:43.623 回答