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

use*_*682 1 vb.net scintilla listbox-control

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

ListBox1.Items.AddRange(CType(TabControl1.SelectedTab.Controls.Item(0), RichTextBox).Lines)
Run Code Online (Sandbox Code Playgroud)

但是,如果我希望使用ScintillaNet DLL执行与下面的行相同的功能,那么这是可行的。我已经尝试使用 dll 进行同样的操作,但它并不完全相同。这是我测试的代码:

ListBox1.Items.AddRange(CType(TabControl1.SelectedTab.Controls.Item(0), ScintillaNet.Scintilla).Lines)
Run Code Online (Sandbox Code Playgroud)

很抱歉我问了这么愚蠢的问题,但我是 ScintillaNet DLL 的菜鸟。

任何帮助将不胜感激。

Ste*_*art 5

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
Run Code Online (Sandbox Code Playgroud)

请注意,我添加的是i.TextListBox不仅仅是i. 正如史蒂夫在下面的评论中敏锐地指出的那样,它LineCollection包含一个对象列表LineToString该类的方法仅Line输出行索引,而不是该行的文本。

  • 我认为这试图将“Line”类型的对象添加到列表框中。可能应该是“i.Text” (2认同)