- ベストアンサー
リストボックスにリストを設定
リストボックスにリストを設定 VB2005,XP です。 配列a(3,10)という配列があったとします。 この配列の(0,0~10)の値をリストに設定(バインド)したり、 構造体b(10) b().NO b().Name b().scale ・・・・ のb.Nameをリストに設定(バインド)する方法を 教えてください。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#2から#4 のNOBNNN です。 結局、 a(3,10) というような2次元配列は そのままでは実現できないです。 ■ 二次元配列をビュー http://hongliang.seesaa.net/article/85853119.html LISTBOX など DATASOURCE に指定できるオブジェクトは ● IList インターフェイス。1 次元配列を含みます。 ● IListSource インターフェイス。DataTable クラス、DataSet クラスなどがあります。 ● IBindingList インターフェイス。BindingList クラスなどがあります。 ● IBindingListView インターフェイス。BindingSource クラスなどがあります。 ILIST インターフェースは 1次元 なので 2次元を一次元に変換、コピーするなどが必要みたいです。 あるいは別クラスでビューを実現する方法. 先の参考サイトに詳細に書かれていますので よく読んでください。(私も実験中です) 1次元のArryList などの説明は #2 で構造体の配列の指定方法は #3 で 2次元については今回#5 で説明しました。
その他の回答 (4)
- NOBNNN
- ベストアンサー率50% (93/186)
#2です。 #3のつづき ちなみにDATASET のクラスをデザイナで定義して型付のDataTable を作成したほうが 配列を使うよりは簡単に バインドできます。 ■ Visual Basic 中学校 > データベース講座 >DataTableの利用 http://homepage1.nifty.com/rucio/main/VBdotNet/Database/Database4.htm DataTable はDBの読み込みする場合だけではなく自由に、自分で定義できます。 配列と同様に行の追加や検索も簡単にできます。デザイナーで構造体と同じように型付で定義も できますし、コード内に定義することもできます。 以上です。
- NOBNNN
- ベストアンサー率50% (93/186)
#2です。 つづき ■ 構造体での配列の場合。 構造体の場合は 構造体の中にプロパティや関数を定義できます。 下記にサンプルソースを載せます。 '****************************************************************** '*** サンプルソース * '*** 構造体の配列を使用して LISTBOX のDATASOURCE にバインドする * '****************************************************************** Structure Ts Dim m_Yname As String Dim m_Tcode As String Public Sub New(ByVal P_Yname As Integer, ByVal P_Tcode As String) m_Yname = P_Yname m_Tcode = P_Tcode End Sub Public ReadOnly Property Yname() As String Get Return m_Yname End Get End Property Public ReadOnly Property Tcode() As String Get Return m_Tcode End Get End Property Public Overrides Function ToString() As String Return m_Yname + "(" + m_Tcode + ")" End Function End Structure Public Class Form3 Public Sub New() ' この呼び出しは、Windows フォーム デザイナで必要です。 InitializeComponent() ' InitializeComponent() 呼び出しの後で初期化を追加します。 End Sub Private Sub Form3_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load '構造体の配列の初期化 → Dim AA_Ary() As Ts = {New TS("",""),New TS("","")} Dim AA_Ary(9) As Ts For I As Integer = 0 To 9 With AA_Ary(I) .m_Yname = "YN" & I + 1 .m_Tcode = "TC0" & I + 1 End With Next Dim UU_LIST As New ArrayList(New String() {"EEE", "BBB"}) With Me.ListBox1 .DataSource = AA_Ary .DisplayMember = "Yname" .ValueMember = "Tcode" End With End Sub End Class ======================= つづく
- NOBNNN
- ベストアンサー率50% (93/186)
配列での方法はいかに記載されているサイトを見てください。 ■ リストボックス・DataSourceプロパティによるアイテムの指定 http://smdn.invisiblefulmoon.net/programming/netfx2/overview/listbox/#section.4 下のほうにスクロールすると 「DataSourceプロパティによるアイテムの指定」について 書かれています。 これを見てみればわかりますが、コンストラクタ(NEW),プロパティでの項目名の値の取得 、Tostring の関数の実装が必要です。 参考サイト: ■ NETのツボ(データー連結) http://www.shoeisha.com/mag/dotnet/pdf/870409/dotnet0409_109_VBNETtubo.pdf ■ リストボックスの使い方で… (OKWAVE) http://okwave.jp/qa/q4192440.html ■ 構造体 http://smdn.invisiblefulmoon.net/programming/vb.net/basics/09_structure/ ■ ArrayListをバインドするには http://jsajax.com/aspListControls/Chapter3/ch3-03.aspx つづく#3 へ
- anmochi
- ベストアンサー率65% (1332/2045)
配列aの方は分からんな。 配列bの方は、リストボックスのDisplayMemberに"Name"を設定すると良いんじゃないかな。この場合、ValueMemberは空にしておけばValueで構造体そのものが取得できたような気がする。最近VB.NET触ってないのでよく覚えてないのであれこれ試してみて欲しい。 DataSourceからbを取得してb(ListBox1.SelectedIndex)でも選択されたものを選べるかも知れん。 ListBox1.DataSource = b ListBox1.DisplayMember = "Name"
お礼
回答ありがとうございます。 リストに使いたい構造体のメンバーのプロパティを 設定したら、anmochiさんに教わったPGで 表示できました。
お礼
回答ありがとうございます。 親切でわかりやすい説明に 参考URLも 教えていただいて本当に感謝しています。 とても勉強になりました。 無事、構造体のメンバーをバインドして リストに表示できました。 ありがとうございました。