複数列設定したコンボボックスで
投稿者 えふ  (社会人)
投稿日時
2009/9/17 19:30:48
すいません。補足です。
form load にて comboboxに下記を設定しています。
ComboBox1.DisplayMember = "Value"
ComboBox1.ValueMember = "key"
よろしくお願いします。
form load にて comboboxに下記を設定しています。
ComboBox1.DisplayMember = "Value"
ComboBox1.ValueMember = "key"
よろしくお願いします。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2009/9/17 20:57:02
.Items.Add ではなく、.DataSource で指定するのは駄目でしょうか?
もし、DataSource を使わないのだとすると、恐らくは SelectedValue 経由での「設定」が
使えなくなるので、SelectedIndex で処理することになるかと思います。
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
ComboBox1.DisplayMember = "Value"
ComboBox1.ValueMember = "Key"
Dim list As New Dictionary(Of String, String)()
list.Add("001", "日本")
list.Add("002", "アメリカ")
list.Add("003", "中国")
list.Add("004", "インド")
ComboBox1.DataSource = list.ToList()
End Sub
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
ComboBox1.SelectedValue = TextBox1.Text
End Sub
もし、DataSource を使わないのだとすると、恐らくは SelectedValue 経由での「設定」が
使えなくなるので、SelectedIndex で処理することになるかと思います。
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
ComboBox1.DisplayMember = "Value"
ComboBox1.ValueMember = "Key"
ComboBox1.Items.Clear()
ComboBox1.Items.Add(New DictionaryEntry("001", "日本"))
ComboBox1.Items.Add(New DictionaryEntry("002", "アメリカ"))
ComboBox1.Items.Add(New DictionaryEntry("003", "中国"))
ComboBox1.Items.Add(New DictionaryEntry("004", "インド"))
End Sub
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
'ループで探す
Dim selectedIndex = -1
For Index = 0 To ComboBox1.Items.Count - 1
Dim entry = ComboBox1.Items(Index)
If TypeOf entry Is DictionaryEntry Then
If DirectCast(entry, DictionaryEntry).Key = TextBox1.Text Then
selectedIndex = Index
Exit For
End If
End If
Next
ComboBox1.SelectedIndex = selectedIndex
End Sub
Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
'Linq で探す
ComboBox1.SelectedIndex = ComboBox1.Items.OfType(Of Object).Select( _
Function(Entry, Index) New With {Entry, Index}).Where( _
Function(x) ((TypeOf x.Entry Is DictionaryEntry) AndAlso ( _
DirectCast(x.Entry, DictionaryEntry).Key = TextBox1.Text))).Select( _
Function(n) n.Index).DefaultIfEmpty(-1).First()
End Sub
投稿者 えふ  (社会人)
投稿日時
2009/9/17 22:07:41
魔界の仮面弁士さんありがとうございます。
すごいですよね。尊敬します。
ループだとコンボの内容が増えると処理時間もその分かかりますしButton1_Clickの
方法ではうまくいきませんでした。Button2_Clickだとうまくいきましたので
参考にさせていただきます。
また他の件で問合せするかもしれませんがよろしくお願いします。
すごいですよね。尊敬します。
ループだとコンボの内容が増えると処理時間もその分かかりますしButton1_Clickの
方法ではうまくいきませんでした。Button2_Clickだとうまくいきましたので
参考にさせていただきます。
また他の件で問合せするかもしれませんがよろしくお願いします。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2009/9/17 23:57:38
> ループだとコンボの内容が増えると処理時間もその分かかりますし
処理時間が増加するのは、Linq であっても一緒なのでは無いでしょうか。
また、件数が多いのであればなおのこと、DataSource 指定の方が都合が良いと思いますよ。
(その場合には、データを DataTable で管理した方が便利です)
> Button1_Clickの方法ではうまくいきませんでした。
あれ。当方では問題が無いのですが…何故でしょうね。
処理時間が増加するのは、Linq であっても一緒なのでは無いでしょうか。
また、件数が多いのであればなおのこと、DataSource 指定の方が都合が良いと思いますよ。
(その場合には、データを DataTable で管理した方が便利です)
> Button1_Clickの方法ではうまくいきませんでした。
あれ。当方では問題が無いのですが…何故でしょうね。
投稿者 えふ  (社会人)
投稿日時
2009/9/19 00:48:35
魔界の仮面弁士さん、遅くなりましたが私のコーディングミスでした。
すいません。
また別途で掲示板に知りたいことありますんでそのときはよろしくお願いします。
すいません。
また別途で掲示板に知りたいことありますんでそのときはよろしくお願いします。
Vb2008にてCombobox1にキーと値を設定しています。
テキストボックスにキー値を入力しButton1をクリックすることで
Combobox1の表示がテキストボックスのキーに相当した値になるように
するにはどうすればよいのでしょうか?教えて下さい。
[Form Load にて]
ComboBox1.Items.Clear()
ComboBox1.Items.Add(New DictionaryEntry("001", "日本"))
ComboBox1.Items.Add(New DictionaryEntry("002", "アメリカ"))
ComboBox1.Items.Add(New DictionaryEntry("003", "中国"))
ComboBox1.Items.Add(New DictionaryEntry("004", "インド"))
[Button1_Clickクリック]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
この部分がわかりません。
End Sub
技術的なことで申し訳ありませんがよろしくお願いします。