- ベストアンサー
vb2005のcomboboxについて
<form name="frm1"> <select name="permit"> <option value="0">いいよ</option> <option value="3">駄目!</option> </select> <input type="button" value="OKv" onClick='alert(frm1.permit.value)'> <input type="button" value="OKt" onClick='alert(frm1.permit.text)'> </form> Web上でこういうセレクトボックスがあったとして、画面上では「駄目!」が選択されているとします。 ここで「OKv」ボタンをクリックすると、その セレクトボックスpermit のvalueである"3"が表示されます。 ここで「OKt」ボタンをクリックすると、その セレクトボックスpermit のtextである"駄目!"が表示されます。 ウェブ上ではたったこれだけのことなんですが。 が、これをvb.net(vb 2005)でやろうとするとどうするのかわかりません・・。 comboboxのどこのプロパティに何をどうセットするのでしょうか。 ちょっと調べてみるとDataSource をセットして、DisplayMember がどうとか出てきましたが、そういうことをしないといけないのでしょうか。 こちらはDataSource も何もなく、手動で(コード上で)valueとtextを設定・取得したいだけなんですけど・・。 何か凄い間違ってるような気もするのですが・・そうでしたらその旨ご指摘くださいますようお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
WindowsFormでやりたいって事ですよね VB.NETになってから コンボボックスのItemDataプロパティが削除されてしまいました VB6コンパチライブラリを使えば ご希望の動作は可能です メニューのプロジェクト > 参照の追加 で 『Microsoft.VisualBasic.Compatibility』選択して OK フォームのコードウィンドウを開いて 先頭付近に Imports Microsoft.VisualBasic.Compatibility を記入 フォームに コンボボックス1個とボタン2個を貼り付けます フォームをダブルクリックして Form_Loadイベントのスケルトンを作ります ここに dim n as Integer n = ComboBox1.items.Add("いいよ") VB6.SetItemData( ComboBox1, n, 0 ) n = ComboBox1.items.Add("駄目!") VB6.SetItemData( ComboBox1, n, 3 ) とします ボタン1をダブルクリックして Button1_clickイベントのスケルトンを作成します ここに dim n as Integer if ComboBox1.SelectedIndex<> -1 then n = VB6.GetItemData( ComboBox1.SelectedIndex ) MsgBox(n) end if ボタン2をダブルクリックしてスケルトンを作成します if ComboBox1.SelectedIndex <> -1 then MsgBox( ComboBox1.Text ) end if といった具合で出来ると思います
その他の回答 (2)
- fumufumu_2006
- ベストアンサー率66% (163/245)
適当な構造体データを作るって方法はどうでしょうか? Public Class Form1 'コンボに表示するデータ Private Structure comboData Public key As Integer Public data As String 'new(新規データ時) Public Sub New(ByVal key As Integer, ByVal data As String) Me.key = key Me.data = data End Sub 'tostring(コンボボックスで表示されるようにするため) Public Overrides Function ToString() As String Return data End Function End Structure Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ComboBox1.Items.Add(New comboData(0, "いいよ")) ComboBox1.Items.Add(New comboData(3, "駄目!")) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If ComboBox1.SelectedIndex > -1 Then MessageBox.Show(ComboBox1.Items(ComboBox1.SelectedIndex).key) MessageBox.Show(ComboBox1.Items(ComboBox1.SelectedIndex).data) End If End Sub End Class p.s. 本当はkeyとdataをPublicにしないでProperty作った方が良いので、下の方がいいかも・・・ Private Structure comboData Private _key As Integer Private _data As String Public Sub New(ByVal key As Integer, ByVal data As String) _key = key _data = data End Sub Public Overrides Function ToString() As String Return _data End Function Public ReadOnly Property key() As Integer Get Return _key End Get End Property Public ReadOnly Property data() As String Get Return _data End Get End Property End Structure
お礼
どちらにしろ面倒ですよね・・・・(6.0やWebと比較の場合) もっと簡単な方法(数行で済むような)がないのかなぁ、皆はどうやってるんだろう、と思っていましたが、諦めることにします。 教えていただいた方法は参考にさせていただきます。 ありがとうございました。
- pbforce
- ベストアンサー率22% (379/1719)
ComboBox1.Items(n)のnがValue値に該当すると思いますが、どのように取得するかは不明です。
お礼
おお、これは前の6.0のコンボボックスそのものですね。 ただ、当方はちょっとライブラリの追加等は若干制約があるので・・ちょっと相談してみます。 もしいけたら大変助かります。 ありがとうございました。