问一下用C#的serialport控件如何实现点击各个button 在对应的textbox中显示接收的数据呀

比如点击获取高度通过serialport发送一串数据
然后在旁边对应的textbox中显示接收回来的数据

第1个回答  2012-04-10
SerialPort port = new SerialPort();
port.PortName = "COM1";
byte[] sendCmd = Encoding.UTF8.GetBytes("要发送的命令");
port.Write(sendCmd, 0, sendCmd.Length);

string Res = port.ReadLine();

//分析res 得到结果显示出来 根据返回方式的不同你也能可需要用 port.ReadByte();来1个1个byte读取
第2个回答  2012-04-09
用过这个控件但是我不知道你问的是和serialport通信问题还是将数据显示到textbox问题还是数据如何对应的问题?追问

可是我确实没法用委托做到在不同的textbox中显示啊
在designer.cs里有这么一行代码
this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.textbox1_DataReceived);
这个只能指定一个textbox
我觉得问题是在这里
我想问问你有没有相应的代码参考一下呢
我邮箱zyseap@163.com 谢谢了!

追答

你这个。。我觉得思路不对。貌似你用的数据绑定?
我觉得你应该this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived);
然后自己定义这个serialPort1_DataReceived函数。
显示的时候用this.invoke(new Action(()=>{
//在这里更改你的textbox的值就应该可以了

}));
上边代码个别拼写可能存在问题。智能提示纠正一下即可。

追问

可是怎么更改textbox的值呢
textbox1、textbox2不是数组形式的啊

追答

不是数组形式的啊?没明白!textbox1.Text=....直接操作不就成了?

追问

......点第二个button想在textbox2中显示
不是在textbox1中显示

追答

你的button非常多吗?需要数组去管理?我有点明白你的这种偷懒想法了,但是就像我说的,这种相互无联系又不是很多的情况下其实单独写id是个好方法。如果非得偷懒,可以将textbox放入一个panel中,然后用panel1.controls找到所有textbox,索引即可。

追问

恩,知道了
但是还有一个问题
用c#接收数据的时候在textbox中显示不出来
但在串口调试助手里头没有任何问题
而在buttonclick中添加一个显示提示框的东西就能显示了
这是什么问题?

本回答被提问者采纳
相似回答