1.禁止下拉框输入:属性中的DropDownStyle设置为DropDownList
2.在textbox中16进制数显示两位:a.ToString("X2");
3.获取电脑上可用的端口号:string[] ports = System.IO.Ports.SerialPort.GetPortNames();
4.将获取到的串口号添加至下拉框:comboBox1.Items.AddRange(ports);
5.弹出消息框: MessageBox.Show();
6.剔除字符串中的空格:str = str.Replace(" ", "");
7.获取串口中可读字节数:int len = serialPort1.BytesToRead;
8.文本框追加显示数据:textBox1.AppendText();
9.清空文本框中内容: textBox1.Clear();
10.文本框中换行: textBox1.AppendText(“\r\n”);
11.程序发布没有证书:使用office工具的VBA数字证书,生成一个证书。
12.代替委托的新方法(调用textBox1.AppendText 报错:线程间操作无效: 从不是创建控件“textBox1”的线程访问它):
Invoke((new Action(() =>
{//C# 3.0以后代替委托的新方法
if (checkBox1.Checked) //16进制显示
{
textBox1.AppendText(byteToHexStr(buff));
}
else //字符串显示
{
textBox1.AppendText(Encoding.Default.GetString(buff));
textBox1.Clear();
}
}
)));
13.USB插拔检测:
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0219) //设备改变
{
if (m.WParam.ToInt32() == 0x8004) //USB拔出
{
string[] ports = System.IO.Ports.SerialPort.GetPortNames();//重新获取串口
comboBox1.Items.Clear(); //清除comboBox里面的数据
comboBox1.Items.AddRange(ports); //给comboBox1添加数据
serialPort1.Dispose(); //释放掉原先的串口资源
comboBox1.SelectedIndex = 0; //选择第一个端口
}
else if (m.WParam.ToInt32() == 0x8000) //usb接入
{
string[] ports = System.IO.Ports.SerialPort.GetPortNames();//重新获取串口
comboBox1.Items.Clear();
comboBox1.Items.AddRange(ports);
comboBox1.SelectedIndex = 0
}
}
}
base.WndProc(ref m);
}
}
14.ModbusCRC16检验位生成:
//eg:01 03 00 02 00 02
//-->01 03 00 02 00 02 65 CB
private void ModbusCRC16(byte[] data)
{
UInt16 tmp = 0xFFFF;
for (int i = 0; i < 6; i++)
{
tmp = (UInt16)(data[i] ^ tmp);
for (int j = 0; j < 8; j++)
{
if ((tmp & 0x01) != 0)
{
tmp >>= 1;
tmp ^= 0xa001;
}
else
{
tmp >>= 1;
}
}
}
data[6] = (byte)(tmp & 0xFF);
data[7] = (byte)(tmp >> 8);
}