2014-01-22 3 views
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.

Любая помощь будет оценена по достоинству.

+0

Какая ошибка у вас? Не могли бы вы объяснить, что это значит? Это не совсем то же самое? – Steve

+0

Полученная ошибка: Ошибка Ошибка при перегрузке из-за отсутствия доступных «AddRange» с этими аргументами: «Public Sub AddRange (items() As Object)»: Значение типа «ScintillaNet.LinesCollection» не может быть преобразовано к «1-мерному массиву объекта». 'Public Sub AddRange (значение As System.Windows.Forms.ListBox.ObjectCollection)': Значение типа 'ScintillaNet.LinesCollection' не может быть преобразовано в 'System.Windows.Forms.ListBox.ObjectCollection'. – user2874682

+0

@Steve by 'не совсем то же самое' Я имею в виду, что код richtextboxes для каждой строки немного отличается от кода для scintillar dll code. Я не уверен, насколько отличается, и я уверен, что вы можете выполнять функцию, которую я хочу выполнить, но я не знаю, какой код для этого работает. – user2874682

ответ

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 просто выводит индекс строки, а не текст из этой строки.

+2

Я думаю, что это пытается добавить объект типа 'Line' в ListBox. Вероятно, это должно быть 'i.Text' – Steve

+0

@Steve Хорошая точка. Я обновил свой ответ. Благодарю. –

Смежные вопросы