在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不断向通信端口发送串行数据,我想把收到的数据放到一个文本框中(新条目单独出现)。
我正在尝试理解整个+ =概念,但我不确定如何使用我需要的代码将串行数据输入文本框...有人可以帮我理解这一点。
答案 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"