有没有办法让列表视图垂直而不是水平添加项目

Is there a way for a listview to add items Vertically instead of horizontally

这段代码是冒泡排序,从一个列表框到下一个列表框排序。 Listbox1 未排序,listbox2 已排序。

 Dim outpt1 As String = ""
    Dim ListOfString As New List(Of String)
    Dim alItems As New ArrayList

    ''Create list of strings (in this case, characters)
    For i As Integer = 0 To Me.ListBox1.Items.Count - 1
        Me.ListBox1.SetSelected(i, True)
        ListOfString.AddRange(ListBox1.Items(i).Split(" "))
    Next
    ''Sort and format
    For Each bub As String In BubbleSortString(ListOfString)
        outpt1 += bub & " "
    Next


    ListBox2.Items.Add(outpt1)

代码将未排序的列表添加到已排序的列表框中,全部排成一行。每个项目都需要一行。非常感谢任何帮助,谢谢

你认为正在发生的事情并没有发生。这并不是说在一行中添加了多个项目。看看你的代码。阅读!你打了多少次ListBox2.Items.Add?一次。那么你要添加多少项目?一!想想你实际上在做什么。 outpt1 是一个 String,您正在将值连接到 String。一旦你连接了所有的值,你就可以将那个 String 添加到 ListBox.

如果这不是您想要的,那就不要这样做。去掉 String 变量,直接将每个值添加到 ListBox。这就是您真正想要的 - 将项目添加到 ListBox - 所以这样做。

For Each bub As String In BubbleSortString(ListOfString)
    ListBox2.Items.Add(bub)
Next

您拥有的代码是您在不知道代码必须做什么的情况下编写代码时最终得到的代码,即不仅是结果,还有实现目标的步骤。这就是为什么您应该首先制定逻辑,如果需要,将其写下来,然后编写代码来实现该逻辑。如果您这样做了,您的算法就不可能包含将所有项目连接成一个字符串的步骤。

我用包含 space.

的字符串填充了一个列表框

Split 返回的数组被添加到 List(Of String) 中。这里要注意,为这段代码和你所有的代码打开 Option Strict。 ListBox 中的 ItemsObject,所以我们需要 .ToString 以便可以使用 .SplitSplit 参数后面的小 c 告诉编译器这是一个 Char,这是 Split 所期望的。

接下来,我在 List(Of String) 上使用 Sort 方法并将排序列表添加到 ListBox2

调试是为了显示我的ListBox2的内容。

Private lst As New List(Of String) From {"Mathew Smith", "Mark Jones", "Luke Name", "John Peter"}

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ListBox1.Items.AddRange(lst.ToArray)
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim ListOfString As New List(Of String)
    For i As Integer = 0 To Me.ListBox1.Items.Count - 1
        ListOfString.AddRange(ListBox1.Items(i).ToString.Split(" "c))
    Next
    ListOfString.Sort()
    ListBox2.Items.AddRange(ListOfString.ToArray)
    For Each item In ListBox2.Items
        Debug.Print(item.ToString)
    Next
    'Result in Immediate Window
    'John
    'Jones
    'Luke
    'Mark
    'Mathew
    'Name
    'Peter
    'Smith
End Sub