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.上記実行結果 |
2. |
3. |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |