1

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

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

任何帮助将不胜感激。

4

3 回答 3

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.TextListBox不仅仅是i. 正如史蒂夫在下面的评论中敏锐地指出的那样,它LineCollection包含一个Line对象列表。类上的ToString方法Line只输出行索引而不是该行的文本。

于 2014-01-22T21:56:57.463 回答
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)
于 2018-11-27T00:18:48.853 回答
-1
Dim ListA As New List(Of String)(New String() {"aaa", "bbb", "ccc", "ddd"})
ComboBox1.Items.AddRange(ListA.ToArray)
于 2019-12-03T15:51:59.353 回答