繁体   English   中英

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

[英]How to add Items to a Listbox?

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

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菜鸟

任何帮助将不胜感激。

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地指出的那样, LineCollection包含一个Line对象列表。 Line类上的ToString方法只输出行索引而不是该行的文本。

基于 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)
Dim ListA As New List(Of String)(New String() {"aaa", "bbb", "ccc", "ddd"})
ComboBox1.Items.AddRange(ListA.ToArray)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM