次の 2 つの選択肢があります。
- リストボックスの使用:
ListBox を使用するには、フォントを courier new のような固定幅のフォントに設定し (列が整列するように)、次のように項目を追加します。
For Each row As DataRow In dt.Rows
lstUsers.Items.Add(RPAD(row("User_Name"),16) & RPAD(row("First_Name"),16) & RPAD(row("Last_Name"),16))
Next
RPAD 関数は次のように定義されます。
Function RPAD(a As Object, LENGTH As Object) As String
Dim X As Object
X = Len(a)
If (X >= LENGTH) Then
RPAD = a : Exit Function
End If
RPAD = a & Space(LENGTH - X)
End Function
必要に応じて LENGTH 引数を調整します。少なくとも 1 つのスペースにもう 1 つ追加します。列幅をハードコーディングする必要があるため、このソリューションは理想的とは言えません。
- ListBox の代わりに DataGridView コントロールを使用します。これは本当に最適なオプションです。必要に応じて、行全体を選択するオプションを設定し、CellBorderStyle を SingleHorizontal に設定することで、ListBox のように動作させることもできます。デザイナーで列を定義しますが、幅を設定する必要はありません。列は自動サイズ調整できます。以下のコードでそのオプションを設定します。それでも幅を設定したい場合は、AutoSizeColumnsMode 行をコメントアウトします。
グリッドを設定して行を追加するコードは次のようになります。
g.Rows.Clear() ' some of the below options are also cleared, so we set them again
g.AutoSizeColumnsMode = DataGridViewAutoSizeColumnMode.AllCells
g.CellBorderStyle = DataGridViewCellBorderStyle.SingleHorizontal
g.SelectionMode = DataGridViewSelectionMode.FullRowSelect
g.AllowUserToAddRows = False
g.AllowUserToDeleteRows = False
g.AllowUserToOrderColumns = True
For Each row As DataRow In dt.Rows
g.Rows.Add(row("User_Name"), row("First_Name"), row("Last_Name"))
Next