为什么RichTextBox中的奇怪间距

时间:2011-04-03 21:49:39

标签: c# winforms richtextbox

我通过串口接收输入并在RichTextBox中显示数据。这样做没问题,只是当我显示数据时,会有很多额外的(不一致的)间距。见下图:

enter image description here

在这种情况下,它显示每两个刻度,但有时它是三个或有时没有。我无法弄清楚为什么会这样。有人有任何想法吗?

修改:以下是我显示数据的方式(代码方式)。

void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
  string msg = port.ReadExisting();
  DisplayWindow.AppendText(msg);
  DisplayWindow.ScrollToCaret();
}

3 个答案:

答案 0 :(得分:4)

对我来说看起来像SerialPort.NewLine,默认是换行符('\ n')。还要检查你是否真的从端口获得某些东西并且不只是向RTB附加一个空行。

从屏幕截图中排除代码故障效果不佳。使用调试器。

答案 1 :(得分:0)

感谢Hans和ChrisF的回复。当我正在研究这个时,我决定搜索ReadExisting()。通过一些SO帖子,事实证明这可能是我的问题。我把它改成了ReadLine(),我不再得到奇怪的换行符了。我将继续使用此方法,看看它是否适用于我的应用程序的其余部分。

很奇怪......

答案 2 :(得分:0)

更好的是,使用TextBox MultiLine设置为true而不是RichTextBoxTextBox忽略数据中的\ r \ n字符,并在看到\ n字符时给出一个新行。

以下是一些示例代码:

  private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
  {
     String ser_data = this.serialPort1.ReadExisting();
  }

...稍后在回调函数中:

richtextbox.AppendText(ser_data);

在该行之前放置一个断点来读取数据。然后通过HyperTerminal从另一台计算机发送回车。您会注意到有时收到的数据是\ r \ n。这样您就可以获得单一的回报。但是,有时\ r \ n是与\ n分开接收的。在这种情况下,您将在富文本框中获得额外的换行符。要么缓冲数据,要么富文本框一起获取\ r \ n,从字符串中删除其中一个,或从源计算机中删除一个(\ r或\ n)。例如,在超级终端中,转到文件 - >属性 - >设置 - > ASCII设置,取消选中“使用换行符发送行结束”。

我知道原始海报已完成此讨论。但如果你正在读这篇文章,我希望它可以帮到你。