Listbox字符串格式与控制台输出不同

时间:2013-09-30 11:20:03

标签: .net vb.net string listbox formatting

我有这个包含列表框的表单

    Public Class Item
    Private sList As List(Of Container)

    Sub New(ByRef sList As List(Of Container))
        InitializeComponent()

        Me.sList = sList
    End Sub

    Private Sub Item_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        For Each c As Container In sList
            ListBox1.Items.Add(c)
        Next


        ListBox1.DataSource = sList
        ListBox1.DisplayMember = "sItem"
    End Sub
End Class

这将是类包含

Public Class Container

    Private _sItemName As String
    Private _sPrice As Single
    Private _iNumber As Integer
    Private _sItemString As String

    Sub New(ByVal _sItemName As String, ByVal _sPrice As Single, ByVal _iNumber As Integer, ByVal _sItemString As String)
        Me._sItem = _sItemName
        Me._sPrice = _sPrice
        Me._iNumber = _iNumber
        Me._sItemString = _sItemString
    End Sub

    Public Property sItemName() As String
        Get
            Return _sItemName
        End Get
        Private Set(value As String)
            _sItemName = value
        End Set
    End Property

    Public Property sItemString() As String
        Get
            Return _sItemString
        End Get
        Private Set(value As String)
            _sItemString = value
        End Set
    End Property

    Public Property sPrice() As Single
        Get
            Return _sPrice
        End Get
        Private Set(value As Single)
            _sPrice = value
        End Set
    End Property

    Public Property iNumber() As String
        Get
            Return _iNumber
        End Get
        Private Set(value As String)
            _iNumber = value
        End Set
    End Property

End Class

然后我将它添加到输出

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim dgv As DataGridView = DataGridView1
    Dim rowIndex As Integer = dgv.SelectedRows(0).Index

    Dim _sItem As String = ""
    Dim _iNumber As Integer = TextBox1.Text
    Dim _sPrice As Single = dgv.Rows(rowIndex).Cells("Prix").Value * TextBox1.Text

    Dim format As String = "{0, -10} {1, -10} {2, 5}"

    _sItem = String.Format(format, dgv.Rows(rowIndex).Cells("Nom").Value.ToString, _sPrice.ToString("C2"), _iNumber.ToString)

    Console.WriteLine(_sItem)
    Dim container As New Container(_sItem, _sPrice, _iNumber, dgv.CurrentRow.Cells("Nom").Value.ToString)

    If (updateDGV(container) = True) Then
        sList.Add(container)
    End If

    TextBox1.Clear()
    TextBox1.Focus()
    updateLabel()
End Sub

所以我的问题是为什么lsitbox上的输出是这样的 enter image description here

控制台输出

enter image description here

我想要的是列表框输出与控制台相同但格式似乎不起作用我不知道我应该如何使这项工作我可以使用一些帮助和解释为什么列表框不是正确显示文字

确定我很清楚:有没有办法让列表框输出看起来与控制台输出相同

编辑:ListView

如果我这样做,你可以看到数据是绑定的

从列表框访问容器

        Dim obj As Object = ListBox1.SelectedItem

    If (TypeOf obj Is Container) Then
        Dim c As Container = CType(obj, Container)

        Console.WriteLine(c.iNumber)
    End If

当我选择一行时,它可以返回我的对象​​,这就是我不知道如何处理列表视图和添加(对于每个Items.add(c)我不知道等效于一个列表视图)

2 个答案:

答案 0 :(得分:2)

控制台中有monospaced font。但不是小部件中的一个。

答案 1 :(得分:1)

根据评论提出,这里有一个带有ListView的多列示例代码:

With ListView1
    .View = View.Details
    .Columns.Add("")
    .Columns.Add("")
    .Columns.Add("")
End With

Dim inputs As List(Of Container) = New List(Of Container)
'populate "inputs"...
For Each item As Container In inputs
    Dim curEntry As New ListViewItem(New String() {item.sItem.ToString(), item.sPrice.ToString(), item.iNumber.ToString()})
    ListView1.Items.Add(curEntry)
Next

您可以通过ListView1.Column(index)独立处理每个列(对齐,宽度等)。