RichTextBox 分配新行但只显示最后一行
RichTextBox assigning new lines but only last line showing
我在 GUI 上使用正则表达式从 GCode 中提取位置 X 和 Y,并将其打印在 richTextBox 上。
private void button1_Click(object sender, EventArgs e)
{
TextReader read = new System.IO.StringReader(richTextBox1.Text);
int rows = richTextBox1.Lines.Length;
Console.WriteLine(rows);
string[] text = new string[rows];
for (int r = 0; r < rows; r++)
{
text[r] = read.ReadLine();
if (text[r] != null)
{
Match posX = Regex.Match(text[r], @"X([0-9\.]+)");
Match posY = Regex.Match(text[r], @"Y([0-9\.]+)");
GroupCollection posXGroup = posX.Groups;
GroupCollection posYGroup = posY.Groups;
Console.WriteLine(posXGroup[1] + "\t" + posYGroup[1] + "\n");
richTextBox2.Text = (posXGroup[1] + "\t" + posYGroup[1] + "\n");
}
}
}
我的 GCode:
N65 G2 X21.5091 Y15.5209 Z0.0000 I0.0277 J-0.7392
N120 G2 X21.5280 Y18.0069 Z0.0000 I0.0255 J-0.7476
N210 G2 X21.5968 Y15.0534 Z0.0000 I-0.0483 J-1.2184
N230 G2 X21.6745 Y17.4894 Z0.0000 I0.0473 J-1.2560
我的问题是将结果打印到 richTextBox。它只打印最后一行的值:21.6745 17.4894
但不打印它上面 3 行的位置。虽然控制台打印成功。有人可以帮我解决这个问题吗?
快速修复是连接文本:
richTextBox2.Text += (posXGroup[1] + "\t" + posYGroup[1] + "\n");
更好的解决方案是永远不要使用字符串连接,因为这会在每个连接添加到堆时给 GC 带来压力。而是使用 StringBuilder:
private void button1_Click(object sender, EventArgs e)
{
TextReader read = new System.IO.StringReader(richTextBox1.Text);
int rows = richTextBox1.Lines.Length;
Console.WriteLine(rows);
string[] text = new string[rows];
var sb = new StringBuilder();
for (int r = 0; r < rows; r++)
{
text[r] = read.ReadLine();
if (text[r] != null)
{
Match posX = Regex.Match(text[r], @"X([0-9\.]+)");
Match posY = Regex.Match(text[r], @"Y([0-9\.]+)");
GroupCollection posXGroup = posX.Groups;
GroupCollection posYGroup = posY.Groups;
Console.WriteLine(posXGroup[1] + "\t" + posYGroup[1] + "\n");
sb.Append(posXGroup[1]);
sb.Append("\t");
sb.Append(posYGroup[1]);
sb.Append("\n");
}
}
richTextBox2.Text = sb.ToString();
}
要查看为什么会发生这种情况,请在行 richTextBox2.Text =
上放置一个断点,然后按 F10 单步执行代码,循环的每次迭代都会重置 richTextBox2.Text 的值。
您分配的太过分了。您需要通过连接附加文本来分配。文本是否有换行并不重要。赋值 =
会将变量设置为文本 属性。加法赋值运算符 +=
将连接。
我在 GUI 上使用正则表达式从 GCode 中提取位置 X 和 Y,并将其打印在 richTextBox 上。
private void button1_Click(object sender, EventArgs e)
{
TextReader read = new System.IO.StringReader(richTextBox1.Text);
int rows = richTextBox1.Lines.Length;
Console.WriteLine(rows);
string[] text = new string[rows];
for (int r = 0; r < rows; r++)
{
text[r] = read.ReadLine();
if (text[r] != null)
{
Match posX = Regex.Match(text[r], @"X([0-9\.]+)");
Match posY = Regex.Match(text[r], @"Y([0-9\.]+)");
GroupCollection posXGroup = posX.Groups;
GroupCollection posYGroup = posY.Groups;
Console.WriteLine(posXGroup[1] + "\t" + posYGroup[1] + "\n");
richTextBox2.Text = (posXGroup[1] + "\t" + posYGroup[1] + "\n");
}
}
}
我的 GCode:
N65 G2 X21.5091 Y15.5209 Z0.0000 I0.0277 J-0.7392
N120 G2 X21.5280 Y18.0069 Z0.0000 I0.0255 J-0.7476
N210 G2 X21.5968 Y15.0534 Z0.0000 I-0.0483 J-1.2184
N230 G2 X21.6745 Y17.4894 Z0.0000 I0.0473 J-1.2560
我的问题是将结果打印到 richTextBox。它只打印最后一行的值:21.6745 17.4894
但不打印它上面 3 行的位置。虽然控制台打印成功。有人可以帮我解决这个问题吗?
快速修复是连接文本:
richTextBox2.Text += (posXGroup[1] + "\t" + posYGroup[1] + "\n");
更好的解决方案是永远不要使用字符串连接,因为这会在每个连接添加到堆时给 GC 带来压力。而是使用 StringBuilder:
private void button1_Click(object sender, EventArgs e)
{
TextReader read = new System.IO.StringReader(richTextBox1.Text);
int rows = richTextBox1.Lines.Length;
Console.WriteLine(rows);
string[] text = new string[rows];
var sb = new StringBuilder();
for (int r = 0; r < rows; r++)
{
text[r] = read.ReadLine();
if (text[r] != null)
{
Match posX = Regex.Match(text[r], @"X([0-9\.]+)");
Match posY = Regex.Match(text[r], @"Y([0-9\.]+)");
GroupCollection posXGroup = posX.Groups;
GroupCollection posYGroup = posY.Groups;
Console.WriteLine(posXGroup[1] + "\t" + posYGroup[1] + "\n");
sb.Append(posXGroup[1]);
sb.Append("\t");
sb.Append(posYGroup[1]);
sb.Append("\n");
}
}
richTextBox2.Text = sb.ToString();
}
要查看为什么会发生这种情况,请在行 richTextBox2.Text =
上放置一个断点,然后按 F10 单步执行代码,循环的每次迭代都会重置 richTextBox2.Text 的值。
您分配的太过分了。您需要通过连接附加文本来分配。文本是否有换行并不重要。赋值 =
会将变量设置为文本 属性。加法赋值运算符 +=
将连接。