c#串口通信,如何让接受到的数据显示在textbox中

milo_c 2013-11-19 05:05:52

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace 串口收发
{
public partial class Form1 : Form
{
public string receiveing = string.Empty;
public string transmission = string.Empty;

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{

transmission = txtTransmission.Text;
serialPort1.WriteLine(transmission);
MessageBox.Show("数据发送成功!", "系统提示");
}

private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
receiveing = serialPort2.ReadLine();
}

private void button2_Click(object sender, EventArgs e)
{

txtReceive.Text = receiveing;
MessageBox.Show("数据接收成功!", "系统提示");
}

private void Form1_Load(object sender, EventArgs e)
{
serialPort1.Open();
serialPort2.Open();
}
}
}
...全文
2526 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyfl1984 2013-11-22
  • 打赏
  • 举报
回复
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO.Ports; namespace 串口收发 { public partial class Form1 : Form { public string receiveing = string.Empty; public string transmission = string.Empty; private SerialPort serialPort1 = new SerialPort("COM3", 9600, Parity.None,8, StopBits.One); private SerialPort serialPort2 = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { serialPort1.Open(); serialPort2.Open(); serialPort2.DataReceived += new SerialDataReceivedEventHandler(serialPort2_DataReceived); } private void button1_Click(object sender, EventArgs e) { transmission = txtTransmission.Text; serialPort1.WriteLine(transmission); MessageBox.Show("数据发送成功!", "系统提示"); } private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { receiveing = serialPort2.ReadLine(); } private void button2_Click(object sender, EventArgs e) { txtReceive.Text = receiveing; MessageBox.Show("数据接收成功!", "系统提示"); } } }
oyfl1984 2013-11-22
  • 打赏
  • 举报
回复
试着修改了一下你的代码是可以的不知道你的是不是串口两个串口初始化时参数填的有问题。
leafmao 2013-11-21
  • 打赏
  • 举报
回复
引用 14 楼 u010119353 的回复:
[quote=引用 12 楼 leafmao 的回复:] [quote=引用 9 楼 u010119353 的回复:] [quote=引用 7 楼 leafmao 的回复:] [quote=引用 4 楼 u010119353 的回复:] [quote=引用 3 楼 sj490790083 的回复:] private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { this.Invoke(new MethodInvoker(delegate {txtReceive.Text=serialPort2.ReadLine();})); }
不行啊,还是显示不出啊[/quote] 那就是串口没接收到东西,在事件里打个断点看看有无进入中断[/quote] 我用的虚拟串口显示接受到数据了,怎么回事 [/quote] 你的serialPort2串口号有没有设置成COM4啊,打个断点会的吧,断点调试呗[/quote] 肯定设置了,不然COM4怎么能收到数据呢[/quote] 虚拟串口里如果COM3和COM4是关联的,通过COM3发送数据,COM4当然能收到啦。。。。这跟你的SerialPort2控件都没关系的。
dannys0302 2013-11-21
  • 打赏
  • 举报
回复
用代码设置一下波特率试试,我用物理设备接到电脑上,发现得用代码来设置波特率才行,如果直接从属性选项那里去设置,会出现莫名其妙的问题,导致接收不到数据
leafmao 2013-11-20
  • 打赏
  • 举报
回复
引用 9 楼 u010119353 的回复:
[quote=引用 7 楼 leafmao 的回复:] [quote=引用 4 楼 u010119353 的回复:] [quote=引用 3 楼 sj490790083 的回复:] private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { this.Invoke(new MethodInvoker(delegate {txtReceive.Text=serialPort2.ReadLine();})); }
不行啊,还是显示不出啊[/quote] 那就是串口没接收到东西,在事件里打个断点看看有无进入中断[/quote] 我用的虚拟串口显示接受到数据了,怎么回事 [/quote] 你的serialPort2串口号有没有设置成COM4啊,打个断点会的吧,断点调试呗
doubleu2005 2013-11-20
  • 打赏
  • 举报
回复
关键你的 receiveing = serialPort2.ReadLine();得到值了么?
milo_c 2013-11-20
  • 打赏
  • 举报
回复
引用 12 楼 leafmao 的回复:
[quote=引用 9 楼 u010119353 的回复:] [quote=引用 7 楼 leafmao 的回复:] [quote=引用 4 楼 u010119353 的回复:] [quote=引用 3 楼 sj490790083 的回复:] private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { this.Invoke(new MethodInvoker(delegate {txtReceive.Text=serialPort2.ReadLine();})); }
不行啊,还是显示不出啊[/quote] 那就是串口没接收到东西,在事件里打个断点看看有无进入中断[/quote] 我用的虚拟串口显示接受到数据了,怎么回事 [/quote] 你的serialPort2串口号有没有设置成COM4啊,打个断点会的吧,断点调试呗[/quote] 肯定设置了,不然COM4怎么能收到数据呢
lfqsy 2013-11-20
  • 打赏
  • 举报
回复
引用 10 楼 u010119353 的回复:
[quote=引用 8 楼 lfqsy 的回复:] 你用串口1发,用串口2去接收?? 应该用串口1的接收函数吧,委托是对的
对的,可为什么就是无法显示在textbox控件中呢[/quote] textbox.invoke(new eventhand(del...{ textbox.text=" **"; }));
milo_c 2013-11-20
  • 打赏
  • 举报
回复
引用 11 楼 lfqsy 的回复:
[quote=引用 10 楼 u010119353 的回复:] [quote=引用 8 楼 lfqsy 的回复:] 你用串口1发,用串口2去接收?? 应该用串口1的接收函数吧,委托是对的
对的,可为什么就是无法显示在textbox控件中呢[/quote] textbox.invoke(new eventhand(del...{ textbox.text=" **"; }));[/quote] 还是不行
milo_c 2013-11-19
  • 打赏
  • 举报
回复
引用 8 楼 lfqsy 的回复:
你用串口1发,用串口2去接收?? 应该用串口1的接收函数吧,委托是对的
对的,可为什么就是无法显示在textbox控件中呢
milo_c 2013-11-19
  • 打赏
  • 举报
回复
引用 7 楼 leafmao 的回复:
[quote=引用 4 楼 u010119353 的回复:]
[quote=引用 3 楼 sj490790083 的回复:]
private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
this.Invoke(new MethodInvoker(delegate {txtReceive.Text=serialPort2.ReadLine();}));
}

不行啊,还是显示不出啊[/quote]

那就是串口没接收到东西,在事件里打个断点看看有无进入中断[/quote]
我用的虚拟串口显示接受到数据了,怎么回事
lfqsy 2013-11-19
  • 打赏
  • 举报
回复
你用串口1发,用串口2去接收?? 应该用串口1的接收函数吧,委托是对的
leafmao 2013-11-19
  • 打赏
  • 举报
回复
引用 4 楼 u010119353 的回复:
[quote=引用 3 楼 sj490790083 的回复:] private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { this.Invoke(new MethodInvoker(delegate {txtReceive.Text=serialPort2.ReadLine();})); }
不行啊,还是显示不出啊[/quote] 那就是串口没接收到东西,在事件里打个断点看看有无进入中断
milo_c 2013-11-19
  • 打赏
  • 举报
回复
引用 5 楼 tangyanzhi1111 的回复:
数据发送成功没判断,所以实际上 有无数据,不知。当然显示不出来了
我自己输入的时候肯定不会让它发送空的东西,而且我加了判断还是一样的,没有显示
江湖评谈 2013-11-19
  • 打赏
  • 举报
回复
数据发送成功没判断,所以实际上 有无数据,不知。当然显示不出来了
milo_c 2013-11-19
  • 打赏
  • 举报
回复
引用 3 楼 sj490790083 的回复:
private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { this.Invoke(new MethodInvoker(delegate {txtReceive.Text=serialPort2.ReadLine();})); }
不行啊,还是显示不出啊
sj490790083 2013-11-19
  • 打赏
  • 举报
回复
private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { this.Invoke(new MethodInvoker(delegate {txtReceive.Text=serialPort2.ReadLine();})); }
milo_c 2013-11-19
  • 打赏
  • 举报
回复
引用 1 楼 bdmh 的回复:
DataReceived中接到数值,就显示吧
不行啊,还是显示不出
bdmh 2013-11-19
  • 打赏
  • 举报
回复
DataReceived中接到数值,就显示吧
namespace 串口实例 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnSend_Click(object sender, EventArgs e) { //手动发送 SendMsg(); } private void SendMsg() { this.serialPort1.Write(this.txtSend.Text); } #region 控制输入数字 private void ComboBox_TextUpdate(object sender, EventArgs e) { ComboBox cbo = sender as ComboBox; int n; if (!int.TryParse(cbo.Text, out n)) { cbo.Text = cbo.Text.Substring(0, cbo.Text.Length - 1); } else { if (n <= 0) { cbo.Text = cbo.Text.Substring(0, cbo.Text.Length - 1); } } } private void txtTime_TextChanged(object sender, EventArgs e) { TextBox text = sender as TextBox; int n; if (!int.TryParse(text.Text, out n)) { text.Text = text.Text.Substring(0, text.Text.Length - 1); } else { if (n <= 0) { text.Text = text.Text.Substring(0, text.Text.Length - 1); } else { this.timer1.Interval = n; } } } #endregion /// /// 清空显示文本框 /// /// /// private void btnClear_Click(object sender, EventArgs e) { this.txtRecive.Clear(); } private void timer1_Tick(object sender, EventArgs e) { SendMsg(); } private void cbtSend_CheckedChanged(object sender, EventArgs e) { CheckBox check = sender as CheckBox; if (check.Checked) { this.timer1.Start(); } else { this.timer1.Stop(); } } /// /// 接收返回的数据 /// /// /// private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { string a=""; if (this.cbkShow16.Checked) { //十六进制显示 a = this.serialPort1.ReadExisting(); } else { //字符串显示 byte[] by = new byte[this.serialPort1.BytesToRead]; this.serialPort1.Read(by, 0, this.serialPort1.BytesToRead); a = Encoding.ASCII.GetString(by); } this.txtRecive.AppendText(a); this.txtRecive.ScrollToCaret(); } private void Form1_Load(object sender, EventArgs e) { //加载 this.serialPort1.RtsEnable = true; button1_Click(this.btnOpen, null); } private void button1_Click(object sender, EventArgs e) { Button btn = sender as Button; if (btn.Text == "打开端口") { try { this.serialPort1.PortName = this.cboPortName.Text; this.serialPort1.BaudRate = Convert.ToInt32(this.cboRaudRate.Text); this.serialPort1.DataBits = Convert.ToInt32(this.cboDataBits.Text); this.serialPort1.ReceivedBytesThreshold = Convert.ToInt32(this.cboReceivedBytesThreshold.Text); this.serialPort1.Open(); btn.Text = "关闭端口"; } catch { MessageBox.Show("打开端口失败,请检查端口是否被占用."); } } else { this.serialPort1.Close(); btn.Text = "打开端口"; } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { try { this.serialPort1.Close(); } catch { } } } }

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧