• ベストアンサー

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を設定・取得したいだけなんですけど・・。 何か凄い間違ってるような気もするのですが・・そうでしたらその旨ご指摘くださいますようお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

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 といった具合で出来ると思います

imaoka077
質問者

お礼

おお、これは前の6.0のコンボボックスそのものですね。 ただ、当方はちょっとライブラリの追加等は若干制約があるので・・ちょっと相談してみます。 もしいけたら大変助かります。 ありがとうございました。

その他の回答 (2)

回答No.3

適当な構造体データを作るって方法はどうでしょうか? 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

imaoka077
質問者

お礼

どちらにしろ面倒ですよね・・・・(6.0やWebと比較の場合) もっと簡単な方法(数行で済むような)がないのかなぁ、皆はどうやってるんだろう、と思っていましたが、諦めることにします。 教えていただいた方法は参考にさせていただきます。 ありがとうございました。

  • pbforce
  • ベストアンサー率22% (379/1719)
回答No.1

ComboBox1.Items(n)のnがValue値に該当すると思いますが、どのように取得するかは不明です。