VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

メニューへ戻ります。 ComboBox Control 関係のメニュー
1.ComboBox コントロールに関するワンポイントテクニック集
2.ComboBox でテキストファイルを使っての読み込み書き込み
3.アイコン付の ComboBox を作成する
4.オーナードローによるComboBoxでの複数列表示 
5.ComboBox 内に指定フォルダー内のファイル一覧を取得表示
6.
7.
8. 
9. 
10. 
11.
12.
 . 
20.その他、当サイト内に掲載の ComboBox に関するサンプル 


4.オーナードローによる ComboBox での複数列表示(17_Cbo_04) (旧、SampleNo.176)
1.オーナードローによる ComboBox での複数列表示
2.
3.
4.
5.
6.

 下記プログラムコードに関する補足・注意事項 
動作確認:Windows 8.1 (Windows 7) / VB2013 (VB2010) / Framework 4.5.1 / 対象の CPU:x86
Option :[Compare Text] [Explicit On] [Infer On] [Strict On]
Imports :追加なし
参照設定:
追加なし
その他 :
    :
このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので)
必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい)
このページのトップへ移動します。 1.オーナードローによる ComboBox での複数列表示
VB6.0 の時は、タブ位置を独自に設定して表示しておりましたが、VB2005 系ではオーナードローで描画できるので、下記に投稿された魔界の仮面弁士さんの ListBox でのコードを参考にさせて頂き作ってみました。

Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'選択した項目を個別に取得する
    If ComboBox1.SelectedItem Is Nothing = False Then
        Dim si As MultiItem = DirectCast(ComboBox1.SelectedItem, MultiItem)
        Debug.WriteLine(si.ItemName)
        Debug.WriteLine(si.Volume)
        Debug.WriteLine(si.Price.ToString("#,##0 円"))
    End If
End Sub

'上記結果
'鉄火巻き
'1貫
'200

Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
    If ComboBox1.SelectedItem Is Nothing Then
        MessageBox.Show("項目がが選択されていません。")
    Else
        Dim si As MultiItem = DirectCast(ComboBox1.SelectedItem, MultiItem)
        Dim msg As String = si.ItemName & vbCrLf & si.Volume & vbCrLf & si.Price.ToString("#,##0 円") _
                                        & vbCrLf & "が選択されました。"
        MessageBox.Show(msg)
    End If
End Sub

Private Sub ComboBox1_DrawItem(sender As Object, e As DrawItemEventArgs) Handles ComboBox1.DrawItem
    e.DrawBackground()
    Dim mi As MultiItem = DirectCast(Me.ComboBox1.Items(e.Index), MultiItem)
    Dim b As Brush = SystemBrushes.WindowText   '通常の表示色
    If e.State = DrawItemState.Selected Then
        b = SystemBrushes.HighlightText         '選択時の反転色
    End If
    '金額(数値)を書式付文字列に変換
    Dim strPrice As String = mi.Price.ToString("#,##0 円")
    '右揃えで表示する為に、strPrice の長さ(Pixel)を取得
    Dim si As Integer = CInt(e.Graphics.MeasureString(strPrice, e.Font).Width)
    With e.Graphics
        '1列目の表示位置等の設定 & 表示
        .DrawString(mi.ItemName, e.Font, b, New PointF(0, e.Bounds.Y))
        .DrawString(mi.Volume, e.Font, b, New PointF(110, e.Bounds.Y))
        '3列目の表示位置等の設定 & 右寄せ表示
        .DrawString(strPrice, e.Font, b, New PointF(250 - si, e.Bounds.Y))
    End With
End Sub

Public Class MultiItem
    Public ItemName As String
    Public Volume As String
    Public Price As Integer
    Public Sub New(ByVal ItemName As String, ByVal Volume As String, _
                    ByVal Price As Integer)
        Me.ItemName = ItemName
        Me.Volume = Volume
        Me.Price = Price
    End Sub
    Public Overrides Function ToString() As String
        '取り出し時は入力時の状態に戻す
        Return String.Format("{0}, {1}, {2:###0}", Me.ItemName, Me.Volume, Me.Price)
    End Function
End Class

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.ComboBox1.DrawMode = DrawMode.OwnerDrawFixed
    With Me.ComboBox1
        .Items.Add(New MultiItem("イカ", "1貫", 200))
        .Items.Add(New MultiItem("ウニ", "1貫", 300))
        .Items.Add(New MultiItem("エビ", "1貫", 250))
        .Items.Add(New MultiItem("たまご", "1貫", 150))
        .Items.Add(New MultiItem("鉄火巻き", "1貫", 200))
        .Items.Add(New MultiItem("トロ", "1貫", 500))
        .Items.Add(New MultiItem("特上盛合せ", "3人前", 5500))
        .Items.Add(New MultiItem("上盛合せ", "3人前", 3500))
        .Text = "メニューを選択してください"
        .BackColor = Color.PowderBlue
        .Font = New Font("MS Pゴシック", 12)
    End With
End Sub

End Class

 図1.上記実行結果
 vb2005combobox04_01
このページのトップへ移動します。 2.


このページのトップへ移動します。 3.


このページのトップへ移動します。 4.


このページのトップへ移動します。 5. 



このページのトップへ移動します。 6.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)
オーナードロー 複数列表示
コンボボックス



このページのトップへ移動します。