5

VB2010。ユニットの列挙の内容をComboBoxに入力しようとしています。私は辞書でこれを行うことができました。何かのようなもの

Dim dUnits As New Dictionary(Of String, Integer)
Dim da As String

For Each enumValue As eUnits In System.Enum.GetValues(GetType(eUnits))
   da = ConvertEnumToCommonName 'gets unique name for an enumeration
   dUnits.Add(da, enumValue)
Next

cbo.DisplayMember = "Key"   'display the the common name
cbo.ValueMember = "Value"   'use the enumeration as the value
cbo.DataSource = New BindingSource(dUnits, Nothing)

うまく機能するフォームをロードすると。これで、ユーザーは表示するデフォルトの単位を選択できます。だから私は試してみます

Dim defUnits As eUnits = eUnits.Feet
Dim idx As Integer = cbo.Items.IndexOf(defUnits) 'doesnt work, returns a -1
cbo.SelectedIndex = idx

私はしばらくの間いくつかの調査を行ってきましたが、これは値を文字列として格納することと関係があるとかなり確信していますComboBox。実際には、整数である列挙型を検索しています。私がその権利を持っているかどうかわからない。とにかく、デフォルトのアイテムを選択できないようです。私が試すことができる別のアプローチはありますか?

4

1 に答える 1

3

まず、整数のコレクションがあり、列挙値を検索しています。そのためには、次のいずれかを試してください。

  1. 文字列の代わりに列挙値を辞書に保存します。

    Dim dUnits As New Dictionary(Of String, eUnits)
    
  2. 辞書に整数を保持しますが、ComboBoxを検索するときは列挙型の整数値を使用します。

    Dim idx As Integer = cbo.Items.IndexOf(CInt(defUnits))
    

しかし、これはまだ機能しません。にデータバインドされてDictionaryいます。つまり、の項目cbo.Itemsは列挙型ではなく、ディクショナリ内の要素の型ですKeyValuePair(Of String, eUnits)上記の#1を想定)。

最も簡単な解決策は、SelectedValueの代わりにコンボボックスのプロパティを設定することSelectedIndexです。上記のオプション#1を使用したとすると、これは次のようになります。

cbo.SelectedValue = defUnits

代わりにオプション#2を使用した場合は、最初にこれを整数に変換する必要があります。

cbo.SelectedValue = CInt(defUnits)
于 2012-11-16T00:46:44.580 に答える