如何将项目添加到列表框?
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)
【讨论】:
以上是关于如何将项目添加到列表框?的主要内容,如果未能解决你的问题,请参考以下文章