如何将项目添加到列表框?

时间:2014-01-22 21:28:27

标签: vb.net scintilla listbox-control

下面的代码行也为列表框的每个索引添加了每一行。

ListBox1.Items.AddRange(CType(TabControl1.SelectedTab.Controls.Item(0), RichTextBox).Lines)

但是,如果我希望执行与下面一行相同的功能,但使用 ScintillaNet DLL ,则可行。我使用dll尝试了同样的事情,但它并不完全相同。这是我测试的代码:

ListBox1.Items.AddRange(CType(TabControl1.SelectedTab.Controls.Item(0), ScintillaNet.Scintilla).Lines)

对不起,我问这么愚蠢的问题,但我是 ScintillaNet DLL 的菜鸟。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

ListBox.Items.AddRange方法只接受Object的数组。 ScintillaNet.Scintilla.Lines属性是ScintillaNet.LinesCollection对象,而不是数组。因此,您无法将其传递给ListBox.Items.AddRange方法。

另一方面,RichTextBox.Lines属性 String的数组,因此可以传递给ListBox.Items.AddRange方法。

不幸的是,没有简单的方法可以将ScintillaNet.LinesCollection对象转换为数组。您可以使用它的CopyTo方法将集合复制到数组中,但是循环遍历集合并单独添加每个集合可能更容易,更有效,如下所示:

For Each i As Line In CType(TabControl1.SelectedTab.Controls.Item(0), ScintillaNet.Scintilla).Lines
    ListBox1.Items.Add(i.Text)
Next

请注意,我将i.Text添加到ListBox而不只是i。正如史蒂夫在下面的评论中明确指出的那样,LineCollection包含Line个对象的列表。 ToString类上的Line方法只输出行索引而不是该行的文本。

答案 1 :(得分:0)

基于Steven Doggart的答案,使用AddRange()而不是Range()看起来像这样:

Dim lst As New List(Of String)

For Each i As Line In CType(TabControl1.SelectedTab.Controls.Item(0), ScintillaNet.Scintilla).Lines
    lst.Add(i.Text)
Next

ListBox1.Items.AddRange(lst.ToArray)

答案 2 :(得分:-1)

Dim ListA As New List(Of String)(New String() {"aaa", "bbb", "ccc", "ddd"})
ComboBox1.Items.AddRange(ListA.ToArray)