玄関へお回り下さい。
リストボックスの指定位置に複数のタブストップ位置を設定 (3個)        (SNo.106)

表示した項目を個別に取り出す
配列データの表示方法
使用コントロール Button1  ListBox1
その他条件 WindowsXP(Vista) Visual Basic 2005(VB2008)
 
★ リストボックスの指定位置に複数のタブストップ位置を設定

'Win32 API 関数の宣言
'指定のウィンドウにメッセージを送る(P750)
<System.Runtime.InteropServices.DllImport("user32", _
    CharSet:=System.Runtime.InteropServices.CharSet.Auto)> _
Private Shared Function SendMessage( _
    ByVal hWnd As IntPtr, _
    ByVal wMsg As Int32, _
    ByVal wParam As Int32, _
    ByVal lParam() As Int32) As Int32
End Function

'システムフォントの平均文字サイズを取得する(P149)
<System.Runtime.InteropServices.DllImport("user32")> _
Private Shared Function GetDialogBaseUnits( _
    ) As Integer
End Function
'リストボックスのタブストップ位置を設定する(P828)
Private Const LB_SETTABSTOPS As Integer = &H192

'ListBox に任意の個数のタブストップを設定するプロシージャ
Private Sub sSetListBoxTabStop(ByRef myControl As System.Windows.Forms.ListBox, _
                   
ByVal ParamArray TabPos() As Integer)
'ListBox に任意の個数のタブストップを設定する
   
Dim i, DUnit, LowWord, TabCount As Integer
    TabCount = UBound(TabPos) 
'タブ設定の数( - 1)
   
Dim TabStop(TabCount) As Integer 'タブストップ位置の配列
    'ダイアログボックスベース単位を取得(ピクセル)
    DUnit = GetDialogBaseUnits()
    LowWord = (GetDialogBaseUnits() 
And &HFFFF) \ 2 '下位ワードで幅を取得
   
For i = 0 To TabCount
        TabStop(i) = 
CInt(TabPos(i) * LowWord) ' 32 =全角で4文字(標準)
        Debug.WriteLine(TabStop(i))
   
Next i
    'タブ位置を設定(TabCount + 1  が1の場合すべて同じ間隔になる)
    SendMessage(myControl.Handle, LB_SETTABSTOPS, TabCount + 1, TabStop)
    myControl.Refresh()
End Sub

'半角換算での12文字目と32文字目にタブを設定
Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
    'MS Pゴシックでも OK です。
    ListBox1.Font = New Font("MS ゴシック", 12)
    '半角換算での12文字目と32文字目にタブを設定
    sSetListBoxTabStop(ListBox1, 12, 32)
End Sub

'選択した項目のデータを個別に取り出し
Private
 Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
'結合したデータを取り出す場合
    Dim myData() As String
    Dim sTmp As String
    sTmp = ListBox1.SelectedItem
    'String.Split メソッドで TAB 位置でのデータの分割(Split関数でも可) 
    myData = sTmp.Split(ControlChars.Tab)
    Dim i As Integer
    For i = myData.GetLowerBound(0) To myData.GetUpperBound(0)
        Debug.WriteLine(myData(i))
    Next i
End Sub


'テスト用データの表示
Private Sub Form1_Load(ByVal sender As System.Object, _
                       ByVal e As System.EventArgs) Handles MyBase.Load
'テスト用データの表示
    With ListBox1
        .Items.Add("12345678901234567890123")
        .Items.Add("〒527-0011" & ControlChars.Tab & "八日市市 12-12" & _
                                    ControlChars.Tab & "蚊取 新語")
        .Items.Add("〒547" & ControlChars.Tab & "大津市 12-1" & _
                                ControlChars.Tab & "木邑 多来也")

        '配列等のデータの場合は、String.Join メソッドを使って結合すれば便利かと思います 
        Dim myData() As String = {"〒555-0011", "彦根市 城町 1-15", "草柳  強"}
        Dim sTmp As String
        sTmp = String.Join(ControlChars.Tab, myData)
        .Items.Add(sTmp)
    End With
End Sub
 

    実行結果 (12文字目と 32文字目にタブ位置を設定)

   

 又、下記のような方法もあります。
     HOW TO: Set Tab Stops in a List Box by Using Visual Basic .NET






2004/05/12
2005/10/18


VBレスキュー(花ちゃん)
VB.NET2003  VB2005