我有用于诊断目的的文本框。背后的代码非常简单:
XAML:
<TextBox HorizontalAlignment="Left" Margin="640,20,0,0" TextWrapping="Wrap" Height="280" Width="840" Name="txtDiagnostic" IsHitTestVisible="True" />
C#:
private void AddMessage(string message)
{
txtDiagnostic.Text += (DateTime.Now.ToString("hh:mm:ss:fff") + " " + message);
}
如何定义每个新输入位于不同的行?因为现在所有的错误只有一长串。
14:15:00错误1 14:16:00错误2 14:17:00错误3
而不是像每个错误之间的换行符那样可读:
14:15:00错误1
14:16:00错误2
14:17:00错误3
答案 0 :(得分:5)
在每个字符串的末尾添加Environment.NewLine
txtDiagnostic.Text += (DateTime.Now.ToString("hh:mm:ss:fff") + " " + message) + Environment.NewLine;
并确保文本框为capable of multiline
XAML:
<TextBox
Name="tbMultiLine"
TextWrapping="Wrap"
AcceptsReturn="True" <-- IMPORTANT
VerticalScrollBarVisibility="Visible" <-- IMPORTANT
>
编辑:至于回应通常的string concatination debate,您当然可以使用string.Concat()
String.Concat(txtDiagnostic.Text,DateTime.Now.ToString("hh:mm:ss:fff") , " " , "ERROR....." , Environment.NewLine);
会更快。这是LINQPad的基准代码,包含1000行:
void Main()
{
Stopwatch sw = new Stopwatch();
string text = "";
sw.Start();
for (int i = 0; i < 1000; i++)
{
//text += (DateTime.Now.ToString("hh:mm:ss:fff") + " " + "ERROR.....") + Environment.NewLine;
String.Concat(text,DateTime.Now.ToString("hh:mm:ss:fff") , " " , "ERROR....." , Environment.NewLine);
}
sw.Stop();
Console.WriteLine("ELAPSED: " + sw.ElapsedMilliseconds);
}
输出:
+
连接(在我的机器上)16 msek
Concat
需要10 msek
选择自己,你应该知道你想要多少错误信息&#34;通知&#34;用户;)
免责声明:1000行是一个非常糟糕的基准,但我选择它来适应手头的用例。读取超过1000行(甚至1000行)的错误消息并不是我想要使用的软件。如果你开始连接较大的行集(x> 1000),那么你真的应该使用StringBuilder
,这也是我提供的字符串连接辩论链接中提到的。
答案 1 :(得分:2)
从源代码中实现Environment.NewLine
:
.NET 4.6.1中的实现:Source
/*===================================NewLine====================================
**Action: A property which returns the appropriate newline string for the given
** platform.
**Returns: \r\n on Win32.
**Arguments: None.
**Exceptions: None.
==============================================================================*/
public static String NewLine {
get {
Contract.Ensures(Contract.Result<String>() != null);
return "\r\n";
}
}
所以你可以用\r\n
作为string
的最后两位数作为输出文本,结果与Mong Zhu的答案完全相同,因为Environment.NewLine
是它的实现。
txtDiagnostic.Text += (DateTime.Now.ToString("hh:mm:ss:fff") + " " + message + "\r\n");
如果您使用\n
或\r\n
,则视平台而定。在Windows上,它实际上是\r\n
。
来自MSDN:
包含“\ r \ n”的字符串 非Unix平台或字符串 包含Unix平台的“\ n”。
答案 2 :(得分:1)
您也可以使用AppendText():
this.txtTest.AppendText("blablabla" + Environment.NewLine);