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

メニューへ戻ります。 ListBox コントロール関係のメニュー
1.ListBox コントロールに関するワンポイントテクニック集
2.ListBox 内の項目の高さ(行の高さ)を設定する
3.リストボックス内のすべての項目を完全一致・前方一致検索
4.ListBox に複数の項目を指定位置に揃えて表示/表示データを個別に取得
5.リストボックスの指定位置に複数のタブストップ位置を設定
6.ListBox 内の項目の色を個別に設定する(オーナードローによる)
7.ListBox の背景色を1行飛びに設定する(オーナードローによる)
8.テキストファイルを読み込んでリストボックスに表示及びファイルに保存
9.2つのリストボックスのスクロールの同期を取る
10. 
11.
12.
 . 
20.その他、当サイト内に掲載の ListBox コントロールに関するサンプル


5.リストボックスの指定位置に複数のタブストップ位置を設定(19_Lst_07) (旧、SampleNo.106)
1.リストボックスの指定位置に複数のタブストップ位置を設定
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 :System.Runtime.InteropServices
参照設定:
追加なし
その他 :
    :
このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので)
必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい)
このページのトップへ移動します。 1.リストボックスの指定位置に複数のタブストップ位置を設定

Imports System.Runtime.InteropServices

Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'02.CSV ファイル(複数列の)を読み込み指定位置に揃えて表示
    'MS Pゴシックでも OK です。
    ListBox1.Font = New Font("MS ゴシック", 12)
    '半角換算での文字位置にタブを設定
    sSetListBoxTabStop(ListBox1, 5, 17, 24, 31, 38)

    With ListBox1
        .Items.Clear()
        .BeginUpdate()
    End With
    Dim n As Integer = 0
    Dim FileName As String = "..\..\..\data\dgvtest1.csv"
    Using sr1 As New System.IO.StreamReader(FileName, System.Text.Encoding.GetEncoding("SHIFT_JIS"))
        'ファイルの最後までループ
        Do Until sr1.Peek = -1
            ListBox1.Items.Add(sr1.ReadLine.Replace(",", vbTab))
        Loop
    End Using
    ListBox1.EndUpdate()
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
'選択した項目を個別に取得する
    If ListBox1.SelectedItem Is Nothing = False Then
        Dim myData() As String
        Dim sTmp As String
        sTmp = ListBox1.SelectedItem.ToString()
        'String.Split メソッドで TAB 位置でのデータの分割(Split関数でも可) 
        myData = sTmp.Split(ControlChars.Tab)
        Dim i As Integer
        Dim msg As String = ""
        For i = myData.GetLowerBound(0) To myData.GetUpperBound(0)
            Debug.WriteLine(myData(i))
            If i = 0 Then
                msg = myData(i)
            Else
                msg &= vbCrLf & myData(i)
            End If
        Next i
        MessageBox.Show(msg)
    End If
End Sub

'指定のウィンドウにメッセージを送る(P750)
<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
Private Shared Function SendMessage( _
    ByVal hWnd As IntPtr, _
    ByVal wMsg As Integer, _
    ByVal wParam As Integer, _
    ByVal lParam() As Integer) As Integer
End Function

'システムフォントの平均文字サイズを取得する(P149)
<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
Private Shared Function GetDialogBaseUnits( _
    ) As Integer
End Function

'リストボックスのタブストップ位置を設定する(P828)
Private Const LB_SETTABSTOPS As Integer = &H192

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

End Class

  図1.上記実行結果
 vb2013listbox05_1

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


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


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


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



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


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)





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