如何在vb.net中打印.txt文件中的RichTextbox时换行

如何在vb.net中打印.txt文件中的RichTextbox时换行,vb.net,visual-studio-2010,Vb.net,Visual Studio 2010,我试图在.txt文件中打印我在RichTextBox中打印的文本 我遇到的问题是,在richtextbox中,每当我要打印换行符时,我都会使用vbCrLf: Dim msg As String = selectedMarker.ToolTipText & " - Position Request: " & vbCrLf ShowMessageColor(msg, Color.Yellow) Public Sub ShowMessageColor(msg_ As String

我试图在.txt文件中打印我在
RichTextBox
中打印的文本

我遇到的问题是,在richtextbox中,每当我要打印换行符时,我都会使用vbCrLf:

 Dim msg As String = selectedMarker.ToolTipText & " - Position Request: " & vbCrLf
 ShowMessageColor(msg, Color.Yellow)

Public Sub ShowMessageColor(msg_ As String, color_ As System.Drawing.Color)
    Console.ConsoleRichTextBox.SelectionStart = Console.ConsoleRichTextBox.Text.Length
    Dim oldColor = Console.ConsoleRichTextBox.SelectionColor
    Console.ConsoleRichTextBox.SelectionColor = color_
    Console.ConsoleRichTextBox.AppendText(msg_ & vbCrLf)
    Console.ConsoleRichTextBox.SelectionColor = oldColor

    Console.ConsoleRichTextBox.ScrollToCaret()
End Sub
在这里,我在richtextbox中以特定颜色打印邮件(我正在更改颜色,因为打印邮件的项目不同,因此我可以识别谁在向我发送邮件)

要在.txt文件中打印,请使用以下命令:

If System.IO.File.Exists(SavePathConsoleLog) Then
        log = Console.ConsoleRichTextBox.Text.ToString & vbCrLf
        File.AppendAllText(SourcePathConsoledLog, log)
    Else
        File.Create("C:\NTGS\BMS\BMS_v6\BMS_v2\ConsoleLog.txt").Dispose()
        log = Console.ConsoleRichTextBox.Text.ToString & vbCrLf
        File.WriteAllText(SourcePathConsoledLog, log)
    End If
这就是我得到的:

Alakran4 - Vehicle Damages Report: Alakran4 - Position Request: Alakran4 - Vehicle and Tripulation State: AO3 - Position Request: AO3 - Target State 
都在同一条线上

我不知道我做错了什么。也许有人能帮我?我认为使用vbCrLf,它必须做到这一点。我以前用过,没有问题。my richtextbox中的信息如下所示:

Alakran4 - Vehicle Damages Report: 

Alakran4 - Position Request: 

Alakran4 - Vehicle and Tripulation State: 

AO3 - Position Request: 

AO3 - Target State 
Dim msg As String = item.ToolTipText & " - Position Request: " & vbCrLf
ShowMessageColor(msg, Color.Yellow)

Public Sub ShowMessageColor(msg_ As String, color_ As System.Drawing.Color)
    Console.ConsoleRichTextBox.SelectionStart = Console.ConsoleRichTextBox.Text.Length
    Dim oldColor = Console.ConsoleRichTextBox.SelectionColor
    Console.ConsoleRichTextBox.SelectionColor = color_
    Console.ConsoleRichTextBox.AppendText(msg_ & vbCrLf)
    timestamp = DateTime.Now
    log = timestamp & vbTab & vbTab & msg_ '& vbCrLf
    File.AppendAllText(SourcePathConsoledLog, log)
    Console.ConsoleRichTextBox.SelectionColor = oldColor

    Console.ConsoleRichTextBox.ScrollToCaret()
End Sub

谢谢你能给我的任何帮助

RichTextBox没有
vbCrLf
作为换行符,它有
vbLf

要获得所需的输出,您应该执行以下操作:

log = Console.ConsoleRichTextBox.Text.Replace(vbLf, vbCrLf) & vbCrLf
If System.IO.File.Exists(SavePathConsoleLog) Then
    File.AppendAllText(SourcePathConsoledLog, log)
Else
    File.Create("C:\NTGS\BMS\BMS_v6\BMS_v2\ConsoleLog.txt").Dispose()
    File.WriteAllText(SourcePathConsoledLog, log)
End If
有点像

编辑:以下示例说明了这一点:

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        RichTextBox1.Text = "Line 1" & vbNewLine & "Line 2"
    End Sub

    Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown
        Debug.Print("Newline: " & RichTextBox1.Text.IndexOf(vbNewLine))
        Debug.Print("Cr: " & RichTextBox1.Text.IndexOf(vbCr))
        Debug.Print("Lf: " & RichTextBox1.Text.IndexOf(vbLf))
    End Sub
End Class
运行时,它给出以下输出:

Newline: -1
Cr: -1
Lf: 6

谢谢你的建议

我没能做到这一点,所以最后我决定在RichTextbox中写这行的时候,在.txt文件中写这行。大概是这样的:

Alakran4 - Vehicle Damages Report: 

Alakran4 - Position Request: 

Alakran4 - Vehicle and Tripulation State: 

AO3 - Position Request: 

AO3 - Target State 
Dim msg As String = item.ToolTipText & " - Position Request: " & vbCrLf
ShowMessageColor(msg, Color.Yellow)

Public Sub ShowMessageColor(msg_ As String, color_ As System.Drawing.Color)
    Console.ConsoleRichTextBox.SelectionStart = Console.ConsoleRichTextBox.Text.Length
    Dim oldColor = Console.ConsoleRichTextBox.SelectionColor
    Console.ConsoleRichTextBox.SelectionColor = color_
    Console.ConsoleRichTextBox.AppendText(msg_ & vbCrLf)
    timestamp = DateTime.Now
    log = timestamp & vbTab & vbTab & msg_ '& vbCrLf
    File.AppendAllText(SourcePathConsoledLog, log)
    Console.ConsoleRichTextBox.SelectionColor = oldColor

    Console.ConsoleRichTextBox.ScrollToCaret()
End Sub
使用这个函数,我在同一个函数中写入Richtextbox和文件中的文本


谢谢你的帮助!非常有用

否,
RichTextBox
不使用
Lf
换行符。它遵循Windows的行为并使用
CrLf
。真的吗?无论如何,我的Visual Studio 2017在Windows 10上不支持。。它只是在行之间显示vbLf。这很奇怪,因为如果您检查
RichTextBox.lines
属性的setter,您将看到如果您向它传递一个字符串数组,它将把它们与
\r\n
CrLf
):
text.Append(\r\n”)。在这方面帮不了你。。我只是看着他们就叫他们…)哇!我刚刚测试了它,你是对的:
RichTextBox
只对换行符使用
Lf
。这种行为相当奇怪,因为Windows本身实际上使用
CrLf
换行符。正常的
TextBox
控件使用
CrLf
。假设您已经阅读了Magnus的答案:Windows的记事本不会将
Lf
解释为换行符。这就是为什么你似乎把所有的东西都放在一条线上,但实际上你不是。