下面的代码行也为列表框的每个索引添加了每一行。
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 的菜鸟。
任何帮助将不胜感激。
答案 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)