- - PR -
リストボックスを使って
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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 | ||||||||
|
投稿日時: 2005-11-15 19:41
Key と Value を持ったクラスか何かのインスタンスを Add しましょう。
あとは、DisplayMember プロパティと、ValueMember プロパティのリファレンスを見てください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 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 | ||||||||
|
投稿日時: 2005-11-16 08:51
本題とは関係のないところですが、
参照渡しではなく値渡しを使いませんか?
空の Catch 句 (握りつぶし) は大抵ご法度です。 せめて、呼び出し側に再スローしましょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1