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の初心者です。

どんな助けでも大歓迎です。

4

3 に答える 3

3

メソッドはのListBox.Items.AddRange配列のみを受け入れますObjectScintillaNet.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していることに注意してください。以下のコメントでスティーブが鋭く指摘したように、 にはオブジェクトのリストが含まれています。クラスのメソッドは、その行のテキストではなく、単に行インデックスを出力します。ListBoxiLineCollectionLineToStringLine

于 2014-01-22T21:56:57.463 に答える
0

Steven Doggart の回答に基づいて、Range() の代わりに AddRange() を使用すると、次のようになります。

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)
于 2018-11-27T00:18:48.853 に答える