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

Posted

技术标签:

【中文标题】如何将项目添加到列表框?【英文标题】:How to add Items to a Listbox? 【发布时间】:2014-01-22 21:28:27 【问题描述】:

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

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

任何帮助将不胜感激。

【问题讨论】:

你得到什么错误?你能解释一下这是什么意思不太一样 收到的错误是错误 1 ​​重载解析失败,因为无法使用以下参数调用可访问的“AddRange”:“Public Sub AddRange(items() As Object)”:“ScintillaNet.LinesCollection”类型的值' 不能转换为 '一维对象数组'。 'Public Sub AddRange(value As System.Windows.Forms.ListBox.ObjectCollection)':'ScintillaNet.LinesCollection' 类型的值无法转换为'System.Windows.Forms.ListBox.ObjectCollection'。 @Steve '不太一样'我的意思是,获取每一行的richtextboxes 代码与闪烁 dll 代码的代码略有不同。我不确定有什么不同,我相信你可以执行我希望执行的功能,但是我不知道正确的代码才能工作。 【参考方案1】:

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

【讨论】:

我认为这试图将Line 类型的对象添加到列表框。应该是i.Text ListBox.Items.AddRange() 比 ListBox.Items.Add() 效率高很多。例如 - 添加 1,000 个项目的快速测试:ListBox1.Items.Add() 在 2.5 秒内完成,而 ListBox.Items.AddRange() 在 20 毫秒内完成【参考方案2】:

基于 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)

【讨论】:

【参考方案3】:
Dim ListA As New List(Of String)(New String() "aaa", "bbb", "ccc", "ddd")
ComboBox1.Items.AddRange(ListA.ToArray)

【讨论】:

以上是关于如何将项目添加到列表框?的主要内容,如果未能解决你的问题,请参考以下文章

除了记录集之外,如何以编程方式将项目添加到 ms 访问列表/组合框

如果不在列表中,则 MS 访问将项目添加到组合框

无法手动将项目添加到通过列表迭代填充的列表框

从其他窗口将新项目添加到列表框

如何将文本框中的字符串添加到另一个窗口中的列表视图

将项目从不同的类添加到列表框