2014-01-09 37 views
-1

在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發送串行數據的通訊端口不斷,我願把接收到的數據到一個文本框(新條目分開進入)。

我想了解整個+ =的概念,但我不知道如何使用我必須輸入串行數據到文本框的代碼...有人可以幫我理解這一點。

+2

是您的代碼的工作?你問的是關於*事件*處理還是什麼? –

+0

@ Hans Passant - 我不同意。我正在慢慢地嘗試學習Arduino,C#和機器人技術。這只是我想了解的最新部分。我有Arduino鏈接到一個力傳感器,它正在輸出串行數據,我希望我的C#程序讀取進入COM端口的數據... –

+0

爲什麼不使用textBox1.AppendText(「Your text」)? – tsells

回答

0

我並不真正關注你問的問題。印度數據是否得到數據?如果是這樣,將文本添加到文本框只是:

textBox.Text += indata; 
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" 
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"; 
} 
+0

我不知道爲什麼,但我不能將「richtextbox1」放入上面描述的錯誤部分:對於非靜態字段,方法或屬性'Arduino_Interface.Form1 .richtextbox1'「 這是爲什麼? –

+0

您可以通過在消息前添加Environment.NewLine來獲取新行,無需使用富文本框 – tsells

+0

在表單中添加富文本框將richtextbox1替換爲您的名稱如果你使用的是視覺工作室,你應該能夠從工具箱中拖出一個到你的表格 – LochnessLAM