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 コントロールに関するサンプル


4.ListBox に複数の項目を指定位置に揃えて表示/表示データを個別に取得(19_Lst_05) (旧、SampleNo.104)
1.ListBox に複数の項目を指定位置に揃えて表示/表示データを個別に取得
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.ListBox に複数の項目を指定位置に揃えて表示/表示データを個別に取得

Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'自作関数を使ってListBoxに複数列の項目を指定位置に揃えて表示
    With ListBox1
        .BeginUpdate()
        .Items.Clear()
        .Font = New Font("MS ゴシック", 12.0)
        .Items.Add(fStrCut("〒527-0011", 12) & fStrCut("八日市市 12-12", 18) & fStrCut("蚊取 新語", 14))
        .Items.Add(fStrCut("〒547-0011", 12) & fStrCut("大津市 12-1", 18) & fStrCut("木邑 多来也", 14))
        .Items.Add(fStrCut("〒555-0011", 12) & fStrCut("彦根市 城町 1-15", 18) & fStrCut("草柳 強", 14))
        .EndUpdate()
    End With
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
'02.CSV ファイル(複数列の)を読み込み指定位置に揃えて表示
    With ListBox1
        .Items.Clear()
        .Font = New Font("MS ゴシック", 12.0)
        .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
            n += 1
            Dim cmDat() As String = Split(sr1.ReadLine, ",")
            For i As Integer = 0 To UBound(cmDat)
                ' "" で囲まれているデータは、"" を取り除く
                cmDat(i) = cmDat(i).Trim(Chr(34))
            Next i
            If n = 1 Then
                ListBox1.Items.Add(fStrCut(cmDat(0).PadLeft(1), 5) & fStrCut(cmDat(1).PadLeft(4), 14) & fStrCut(cmDat(2), 6) & _
                        fStrCut(cmDat(3), 6) & fStrCut(cmDat(4), 6) & fStrCut(cmDat(5), 6))
            Else
                ListBox1.Items.Add(fStrCut(cmDat(0).PadLeft(3), 5) & fStrCut(cmDat(1), 14) & fStrCut(cmDat(2).PadLeft(3), 6) & _
                        fStrCut(cmDat(3).PadLeft(3), 6) & fStrCut(cmDat(4).PadLeft(3), 6) & fStrCut(cmDat(5).PadLeft(4), 6))
            End If
        Loop
    End Using
    ListBox1.EndUpdate()
End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
'ListBoxに複数列の項目を表示したデータを個別に取り出し
    If ListBox1.SelectedIndex <> -1 And ListBox1.Items.Count > 10 Then
        Dim lstItem As String = ListBox1.SelectedItem.ToString()
        MessageBox.Show(fMidB(lstItem, 0, 5).Trim & vbCrLf & fMidB(lstItem, 5, 14).Trim & vbCrLf & fMidB(lstItem, 19, 6).Trim _
                & vbCrLf & fMidB(lstItem, 25, 6).Trim & vbCrLf & fMidB(lstItem, 31, 6).Trim & vbCrLf & fMidB(lstItem, 37, 6).Trim)
    End If
End Sub

Private Function fStrCut(ByVal Mystring As String, ByVal nLen As Integer) As String
'文字列を指定のバイト数にカットする関数(漢字分断回避)
    fStrCut = ""
    Dim sjis As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
    Dim TempLen As Integer = sjis.GetByteCount(Mystring)
    If nLen < 1 Or Mystring.Length < 1 Then Return fStrCut
    If TempLen <= nLen Then  '文字列が指定のバイト数未満の場合スペースを付加する
        Return Mystring.PadRight(nLen - (TempLen - Mystring.Length), CChar(" "))
    End If
    Dim tempByt() As Byte = sjis.GetBytes(Mystring)
    Dim strTemp As String = sjis.GetString(tempByt, 0, nLen)
    '末尾が漢字分断されたら半角スペースと置き換え
    If strTemp.EndsWith(ControlChars.NullChar) Then
        strTemp = sjis.GetString(tempByt, 0, nLen - 1) & " "
    End If
    Return strTemp
End Function

Private Function fMidB(ByVal myString As String, ByVal sByt As Integer, ByVal nByt As Integer) As String
'指定バイト位置から指定バイト数分の文字列を取り出す関数
    Dim sjis As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift_JIS")
    Dim tempByt() As Byte = sjis.GetBytes(myString)
    Dim sumByt As Integer = sjis.GetByteCount(myString)
    If sByt < 0 Or nByt <= 0 Or sByt > sumByt Then Return ""
    Dim strTemp As String = sjis.GetString(tempByt, 0, sByt)
    If sByt > 0 And strTemp.EndsWith(ControlChars.NullChar) Then
        sByt += 1  '開始位置が漢字の中なら次(前)の文字から開始
    End If
    If sByt + nByt > sumByt Then  '文字長より多く取得しようとした場合
        nByt = sumByt - sByt    '文字列の最後までの分とする
    End If
    Return sjis.GetString(tempByt, sByt, nByt).TrimEnd(CChar(vbNullChar))
End Function

End Class

  図1.上記実行結果
 vb2013listbox04_1

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


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


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


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



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


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)
リストボックス 複数列表示 指定の文字幅にカット




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