- PR -

リストボックスを使って

1
投稿者投稿内容
バニラミント
ベテラン
会議室デビュー日: 2005/05/27
投稿数: 58
投稿日時: 2005-11-15 19:03
いままでコンボボックスを利用して項目選択などを
作ってきましたが、今回、リストボックスを利用して
少し機能の多いコンボボックスを作ってみようと思いました

まず、Windowsフォーム1で、ラベルをクリックした時の
イベントに、Windowsフォーム2を開くコードを書きます

Windowsフォーム2でリストボックスを表示し、ユーザに
任意のデータを選択させます

Windowsフォーム2で、
コマンドボタンのクリックイベントで選択されたデータを
変数に代入。

とここまではできたのですが、

やってみたいのは、リストボックスには、名称を表示して
実際に取り込むデータはコードにしたいのです。

思いついたのは、以下のコードのように、Items.Addの際に
コード&名称としておいて、取り込むときに、Mid$などの
関数を利用して、文字を切り取るというものですが、
もう少し、いい方法がないかといろいろ模索中です。

もしこんな方法が!というのがありましたら
教えていただけますでしょうか?
よろしくお願いします。

------------------------------------- コード

Imports Microsoft.Data.Odbc

Public Class frmSR_Ins
Inherits System.Windows.Forms.Form

〜中略〜

Private m_skey As String

Public Property sKey() As String
Get
Return m_skey
End Get
Set(ByVal Value As String)
m_skey = Value
End Set
End Property

Private Sub frmSR_Ins_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim sqltxt As String = _
"SELECT table.* " & _
"FROM table " & _
ViewDetail(sqltxt)
End Sub

Private Sub ViewDetail(ByRef sqltxt As String)

Dim cdb As New db
Dim oCmd_m As OdbcCommand
Dim oRd_m As OdbcDataReader
Dim ins As New db_ins
Dim code As New db_code

Try

oCmd_m = New OdbcCommand(sqltxt, cdb.cn)
oRd_m = oCmd_m.ExecuteReader

Do While (oRd_m.Read())
Dim inscd As Integer = oRd_m("field01")
ListBox1.Items.Add("[" & inscd.ToString("000000") & "]" & oRd_m("field03"))
Loop

cdb.cn.Dispose()
oRd_m.Close()

Catch ex As Exception

End Try

End Sub

Private Sub CB_SELECT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CB_SELECT.Click
Me.sKey = ListBox1.SelectedItem()
Me.Close()
End Sub
End Class



じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-15 19:41
Key と Value を持ったクラスか何かのインスタンスを Add しましょう。
あとは、DisplayMember プロパティと、ValueMember プロパティのリファレンスを見てください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
バニラミント
ベテラン
会議室デビュー日: 2005/05/27
投稿数: 58
投稿日時: 2005-11-16 08:28
じゃんぬねっとさん、レスありがとうございました
教えていただいたDisplayMemberとValueMemberを
利用したらできました^^

Private Sub ViewDetail(ByRef sqltxt As String)

Dim cdb As New db
Dim da As OdbcDataAdapter
Dim dtSet As DataSet = New DataSet("SRIns")

Try

da = New OdbcDataAdapter(sqltxt, cdb.cn)
da.Fill(dtSet, "SRIns")
Dim dtv As New DataView(dtSet.Tables("SRIns"))
ListBox1.DataSource = dtv
ListBox1.DisplayMember = "表示したい名称"
ListBox1.ValueMember = "取得したいキー(コード)"

cdb.cn.Dispose()

Catch ex As Exception

End Try

End Sub

Private Sub CB_SELECT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CB_SELECT.Click
Me.sKey = ListBox1.SelectedValue
Me.Close()
End Sub
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-16 08:51
本題とは関係のないところですが、

引用:

バニラミントさんの書き込み (2005-11-16 08:28) より:

Private Sub ViewDetail(ByRef sqltxt As String)


参照渡しではなく値渡しを使いませんか?

引用:

Catch ex As Exception

End Try


空の Catch 句 (握りつぶし) は大抵ご法度です。
せめて、呼び出し側に再スローしましょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)