总述
winform自定义组合控件可以对经常使用的一些功能进行封装到一起,形成一个新的控件,方便使用。
示例说明
创建项目
打开VS,选择窗体控件库创建项目
串口配置控件
实现效果
控件 | 说明 |
---|---|
label4 | 显示连接状态 |
串口号combox | 初始化时自动搜索串口并添加 |
波特率combox | 限定选择项(115200等) |
数据位combox | 5,6,7,8 |
停止位combox | 0, 1.5, 2 |
自动重连checkbox | 串口因某些原因断开时自动尝试重连 |
启动button | 启动串口并创建线程接收,收到后传入回调 |
搜索picturebox | 手动搜索串口号 |
实现代码
搜索串口号
` string[] com_array = SerialPort.GetPortNames();
comboBox1.Items.Clear();
comboBox1.Items.AddRange(com_array);`
回调函数
public delegate void DataProcCallBack(byte[] data, int len); //定义委托
public event DataProcCallBack DataInput;
//外部调用
放置控件后再事件里找到DataInput双击就可以编写自己的处理代码了,注意改变控件时要用委托
//示例
delegate void setText(string t);
void setrichText(string t)
{
if (richTextBox1.InvokeRequired)
{
while (!richTextBox1.IsHandleCreated)
{
//解决窗体关闭时出现“访问已释放句柄“的异常
if (richTextBox1.Disposing || richTextBox1.IsDisposed)
return;
}
setText st = new setText(setrichText);
richTextBox1.Invoke(st, new object[] {t});
}
else
{
richTextBox1.AppendText(t);
}
}
打开串口
serialPort1.Open();
if (serialPort1.IsOpen)
{
label4.Text = "打开成功";
uiButton1.Text = "关闭";
serialRevFlag = true;
serialThread = new Thread(serialRevTask);
serialThread.Start();
}
接收线程
byte[] serialRevBuffer = new byte[1024];
void serialRevTask()
{
while (serialRevFlag)
{
try
{
int len = serialPort1.Read(serialRevBuffer, 0, 1024);
DataInput(serialRevBuffer, len);
}
catch{
}
Thread.Sleep(2);
}
return;
}
获取源码
-
当前版本自动重连还未加
关注公众号,发送 串口控件