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.上記実行結果 |
2. |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |
リストボックス 複数列表示 指定の文字幅にカット |