将串行端口信息显示到文本框中

时间:2014-01-09 23:48:13

标签: c# serial-port

在C#中,我有以下代码:

public Form1()
{
   InitializeComponent();
   System.ComponentModel.IContainer components = new System.ComponentModel.Container();
   serialPort1 = new System.IO.Ports.SerialPort(components);
   serialPort1.PortName = "COM7";
   serialPort1.BaudRate = 9600;
   serialPort1.DtrEnable = true;
   serialPort1.Open();
   serialPort1.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
   SerialPort sp = (SerialPort)sender;
   string indata = sp.ReadExisting();
}

我有一个Arduino不断向通信端口发送串行数据,我想把收到的数据放到一个文本框中(新条目单独出现)。

我正在尝试理解整个+ =概念,但我不确定如何使用我需要的代码将串行数据输入文本框...有人可以帮我理解这一点。

3 个答案:

答案 0 :(得分:1)

不要使用文本框使用RichTextBox,以便获得新行。我还建议将其设为只读。另外,不要忘记在每个传入字符串的末尾添加换行符(“\ n”)。

代码看起来像这样

public Form1()
{
    InitializeComponent();
    System.ComponentModel.IContainer components = new System.ComponentModel.Container();
    serialPort1 = new System.IO.Ports.SerialPort(components);
    serialPort1.PortName = "COM7";
    serialPort1.BaudRate = 9600;
    serialPort1.DtrEnable = true;
    serialPort1.Open();
    serialPort1.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{

    SerialPort sp = (SerialPort)sender;
    RichTextBox1.Text += sp.ReadExisting() + "\n";
}

答案 1 :(得分:0)

我并没有真正关注你的要求。 indata能获得数据吗?如果是这样,只需将文本添加到文本框中:

textBox.Text += indata;

答案 2 :(得分:0)

在上面列出的情况下,+=运算符用于订阅事件。

serialPort1.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

表示在引发DataReceived事件时,它将调用DataReceivedHandler。有关更多信息,请查看MSDN。在DataReceivedHandler只需添加TextBox.Text += indata + "\r\n";为此,您需要删除方法签名中的static修饰符。

在其他情况下,与int一样,它是赋值增量运算符,例如它们是相同的

int i = 1;
int j = 5;    
j += i;    
//j == 6

对于System.String,它用于将字符串连接在一起。

string name = "John";
name += "Smith";
//name = "JohnSmith"