【问题标题】:Listbox1 add all the items to richtextbox in the same formatListbox1 以相同的格式将所有项目添加到richtextbox
【发布时间】:2014-08-29 03:39:41
【问题描述】:

我正在尝试获取所有ListBox1 项目并将它们转到RichTextBox1。我希望它采用与ListBox1 相同的格式。我尝试了不同的代码,它们似乎在项目之间提供了额外的空白行。到目前为止,我已经想到了这一点,但它给出了额外的空白行。

Dim counter As String

counter = ListBox1.Items.Count - 1
ListBox1.SelectedIndex = 0

If ListBox1.SelectedIndex = 0 Then
    Do Until ListBox1.SelectedIndex = counter
        ListBox1.SelectedIndex = ListBox1.SelectedIndex + 1
        RichTextBox1.Text = RichTextBox1.Text & vbNewLine & ListBox1.SelectedItem
    Loop
End If

【问题讨论】:

  • 看起来你需要Trim()你的字符串。请查看我的编辑。

标签: vb.net visual-studio-2012 listbox richtextbox loading


【解决方案1】:

使用LINQ 选择所有项目并加入Environment.NewLine

.Net >= 4.0

Me.RichTextBox1.Text = String.Join(Environment.NewLine, (From item As Object In Me.ListBox1.Items Select Me.ListBox1.GetItemText(item).Trim()))

.Net >= 3.5

Me.RichTextBox1.Text = String.Join(Environment.NewLine, (From item As Object In Me.ListBox1.Items Select Me.ListBox1.GetItemText(item).Trim()).ToArray())

【讨论】:

  • 给我一个错误:无法将“WhereSelectEnumerableIterator`2[System.Object,System.String]”类型的对象转换为“System.String[]”类型。
  • 意思是发布这个: Dim Items As String() = From s As String In ListBox1.Items RichTextBox1.Text = String.Join(Environment.NewLine, Items)
  • @RandomShelly 不,ListBox.ObjectCollection 包含 Objects
  • @Bjørn-RogerKringsjå - 你是对的......但是为什么它会给出那个错误......即使它不应该......你在 GetItemText (项目)中使用一个对象 -它返回一个字符串......但枚举器是导致问题的原因?我不确定,所以这就是为什么我从我在“答案”中引用的链接复制了我在 cmets 中粘贴的代码...
  • @RandomShelly 因为从.Net 4.0开始你可以加入IEnumerable(Of String)。在此之前,您只能加入 String() 参见:msdn.microsoft.com/en-us/library/dd992421(v=vs.110).aspx
【解决方案2】:

您在添加 ListBox 文本之前添加了一个 vbNewLine...您应该将其放在行尾 RichTextBox1.Text = RichTextBox1.Text & ListBox1.SelectedItem & vbNewLine 并且您也不应该在添加该行之前增加您选择的索引值...

或者,您可以这样做..

For i = 0 To ListBox1.Items.Count - 1 
RichTextBox1.Text = RichTextBox1.Text & ListBox1.Items(i) & vbCrLf 
Next 

或者这个 SO 问题有一些使用 LINQ 和压缩查询代码的好例子...... passing all the items of listbox in the richtextbox

【讨论】:

  • +1 因为它工作。但它与问题的方式不同
  • @Sample - 是的,它是不同的 - 这就是为什么我把'替代' - 我倾向于 try 编写更短的代码......并不总是有效,但我很少使用必须手动递增的计数器——它不止一次地咬了我。当忘记加或减时,那个著名的无限循环......
  • 仍然在项目之间放置空格
  • @user3329318 - 您是否单击了指向其他 SO 线程的链接? ...使用“RichTextBox.Lines =”的第一个答案可能有效吗?你是说这会放入文本和一个空行,然后是下一个文本? ListBox 字符串中是否有 CRLF 字符?
【解决方案3】:

这是因为最初富文本框是空的。因此RichTextBox1.Text = RichTextBox1.Text & vbNewLine & ListBox1.SelectedItem 将首先添加New Line,然后将列表的第二个元素添加到richtextbox,这是因为您在添加到richtexbox 之前将选定的索引值增加了1。所以你的代码可以有效地使用如下:

    Dim counter As Integer = ListBox1.Items.Count - 1
    ListBox1.SelectedIndex = 0
    If ListBox1.SelectedIndex = 0 Then
        Do Until ListBox1.SelectedIndex = counter
            RichTextBox1.Text = RichTextBox1.Text & ListBox1.SelectedItem & vbNewLine
            ListBox1.SelectedIndex = ListBox1.SelectedIndex + 1
        Loop
    End If 

【讨论】:

  • 我可以看看你得到的输出吗?您在哪里/在哪种情况下包含此 sn-p?
  • @Sample 查看您的代码。 Dim counter As String?真的吗?字符串?
  • @Bjørn-Roger Kringsjå:感谢您的纠正。我纠正了它
  • 这里有一个谜题:为什么我使用GetItemText(obj) 而不是SelectedItemItems(n)
【解决方案4】:

尝试使用 streamwriter 和 writeline() 将列表框保存到文件中,然后使用 streamreader 和 readtoend() 将其打开到文本框中
'assuming you have the default names dim reader As streamreader, writer As streamwriter writer = new streamwriter("TMP") for each x as object in listbox1.items writer.writeline(X) next writer.close() reader=new streamreader("TMP") textbox1.text=reader.readtoend() reader.close()

【讨论】:

    猜你喜欢
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多