目录
《2》支持热插拔自动检索串口与其他数据接收及端口初始化等代码
1.新建窗体项目
2.窗体布局
①更改窗体标题(凭个人喜好更改)
②更改窗体大小和再生成窗体的时候固定窗体不允许更改大小
③选择控件
《1》选择textBox控件
《2》用复制的方式再新建一个textBox
任意更改复制之后textBox控件尺寸
《3》使用button控件
选择多个并更改命名,如下图所示,位置根据喜好变换
《4》使用label控件
多拉选几个并改不同的名称
改名的位置在
《5》使用combox控件
在显示波特率的集合填如下内容
在显示数据位的集合填如下内容
在显示停止位的集合填如下内容
在显示校验位的集合填如下内容
设置好如下图
3.填写代码
《1》有关button的代码
private void btnClearSend_Click(object sender, EventArgs e)
{
txtSend.Text = string.Empty;
}
private void btnClearRe_Click(object sender, EventArgs e)
{
txtReceive.Text = string.Empty;
}
private void btnOpenPort_Click(object sender, EventArgs e)
{
if (SpCom.IsOpen)
{
SpCom.Close();
btnOpenPort.Text = "打开串口";
}
else
{
InitPort();
try
{
SpCom.Open();
btnOpenPort.Text = "关闭串口";
MessageBox.Show("串口初始化成功!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
private void btnSend_Click(object sender, EventArgs e)
{
try
{
byte[] encodeBytes =
Encoding.GetEncoding("GB2312").GetBytes(txtSend.Text);
int length = encodeBytes.Length;
SpCom.Write(encodeBytes, 0, length);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
《2》支持热插拔自动检索串口与其他数据接收及端口初始化等代码
using System.IO.Ports;
SerialPort SpCom = new SerialPort();
public Form1()
{
InitializeComponent();
//注册串口数据接收事件
SpCom.DataReceived += SpCom_DataReceived;
GetSerialLstTbl();
}
private void GetSerialLstTbl()
{
//清除comboBoxEx显示
cboPortName.SelectedIndex = -1;
cboPortName.Items.Clear();
//获取串口列表
string[] serialLst = SerialPort.GetPortNames();
if (serialLst.Length > 0)
{
//取串口列表进行排序
Array.Sort(serialLst);
//将串口列表输出到comboBoxEx
cboPortName.Items.AddRange(serialLst);
cboPortName.SelectedIndex = 0;
}
}
public const int WM_DEVICE_CHANGE = 0x219; //设备改变
public const int DBT_DEVICEARRIVAL = 0x8000; //设备插入
public const int DBT_DEVICE_REMOVE_COMPLETE = 0x8004; //设备移除
//消息处理
protected override void WndProc(ref Message m)
{
switch (m.Msg) //判断消息类型
{
case WM_DEVICE_CHANGE: //设备改变消息
{
GetSerialLstTbl(); //设备改变时重新获取串口列表
} break;
}
base.WndProc(ref m);
}
private void SpCom_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int length = SpCom.BytesToRead;
byte[] recData = new byte[length];
SpCom.Read(recData, 0, length);
string recText = Encoding.GetEncoding("GB2312").GetString(recData);
//更新接收区
txtReceive.Invoke(new EventHandler(delegate
{
txtReceive.AppendText(recText);
}));
}
public void InitPort()
{
SpCom.PortName = cboPortName.Text;
SpCom.BaudRate = int.Parse(cboBaudRate.Text);
SpCom.DataBits = int.Parse(cboData.Text);
SpCom.Parity = (Parity)Enum.Parse(typeof(Parity), cboTest.Text);
SpCom.StopBits = (StopBits)Enum.Parse(typeof(StopBits),
cboStop.Text);
}