アプリ版:「スタンプのみでお礼する」機能のリリースについて

<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を設定・取得したいだけなんですけど・・。

何か凄い間違ってるような気もするのですが・・そうでしたらその旨ご指摘くださいますようお願いします。

A 回答 (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

といった具合で出来ると思います
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/11/27 01:54

適当な構造体データを作るって方法はどうでしょうか?



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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/11/27 01:51

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

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!