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 を選択すると、「オプション 1_DE」、「オプション 2_DE」、「オプション 3_DE」の選択肢が表示されます。彼らがオプション 3_DE を選択した場合、これをオプション 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

コンボボックスから値を取得して、文字列を解析できます。_変更したい部分の前にa が含まれていることがわかります。そのため、前に文字列を処理して数値を見つけてから、を置き換えるか、場合によっては連結し_て別の文字列にプラグインします。Option X_ENXOption_EN

しかし、あなたがやろうとしていることは、これを行うための本当に不自然な方法のようです...

于 2013-06-23T23:48:43.623 に答える