版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangdashi888/article/details/81916994
1、窗体无边框拖动效果
#region 无边框拖动效果
[DllImport("user32.dll")]//拖动无窗体的控件
public static extern bool ReleaseCapture();
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MOVE = 0xF010;
public const int HTCAPTION = 0x0002;
private void Start_MouseDown(object sender, MouseEventArgs e)
{
//拖动窗体
ReleaseCapture();
SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
}
#endregion
其中这里的Start_MouseDown的拖动代码可以放到一个新类里,并且声明为静态函数,这样就可以实现代码的重复利用。例如;
API.Win32API.BIOOIMouseDown((int)this.Handle);
2、把整形数据转换为字节数据,从而用于串口数据发送:
例如:把一个int型的价格数据转换为由多个字节表示的数据,其中这些字节联合后则可以转换为对应的16进制数据,其如下:
byte[] encodeprice = BitConverter.GetBytes(822);
其中的encodeprice的字节数是根据输入的int类型价格改变的。生成的byte则可以实现对16进制的转换。
3、C#里的对于string的split函数用法:
string Str = "aaajsbbbjccc";
///进行单字符分割
string[] sArray = Str.Split('j');
string sArray0 = sArray[0];
//或者直接一步
string sArray0 = Str.Split('j')[0];
///使用多个单字符分割
string[] sArray = Str.Split(new char[2] { 'j', 's' });
///使用字符串来进行分割
string[] sArray = Regex.Split(Str, "js", RegexOptions.IgnoreCase);
4、C#使用系统自身API来获取串口的硬件名称方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Management;
/// <summary>
/// 这是使用windows自身的api来做的,具体可以参考微软官网:
/// https://technet.microsoft.com/zh-cn/aa394353(v=vs.71)
/// </summary>
namespace NHChemi.BIOOICommunication
{
class GetPortHardwareInfo
{
public enum HardwareInfoEnum
{
Win32_PnPEntity,
}
public static string[] MulGetHardwareInfo(HardwareInfoEnum eType, string Keyvalue)
{
List<string> strs = new List<string>();
try
{
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from " + eType))
{
var hardinfos = searcher.Get();
foreach (var hardinfo in hardinfos)
{
if (hardinfo.Properties[Keyvalue].Value != null)
{
if (hardinfo.Properties[Keyvalue].Value.ToString().Contains("COM"))
{
strs.Add(hardinfo.Properties[Keyvalue].Value.ToString());
}
}
}
searcher.Dispose();
}
return strs.ToArray();
}
catch
{
return null;
}
}
public static string[] GetSerialPort()
{
return MulGetHardwareInfo(HardwareInfoEnum.Win32_PnPEntity, "Name");
}
}
}
接着在查找串口处可以通过串口的硬件名称来判断此串口是否是自己需要的串口,使用如下:
//自动串口搜索
string curportname = null;
string[] comstr = null;
//软件配置文件读取自己串口硬件包含有的特殊字符串
string m_nPortName = CBIOOIConfig.GetValuestring(CBIOOIConfig.KEY_SerialName, "Serial");
//获得所有串口的硬件名称
comstr = GetPortHardwareInfo.GetSerialPort();
for (int i = 0; i < comstr.Length; i++)
{
//如果有符合自己需要的硬件串口名称在此串口时自己需要的串口。
if (comstr[i].Contains(m_nPortName))
{
CBIOOIConfig.SetAppSettings(CBIOOIConfig.KEY_SerialName, m_nPortName);
//因为硬件名称如:USB Serial Port(COM14),需要把括号里的串口名提取出来
string str = comstr[i].Split(new char[2] { '(', ')' })[1];
curportname = str;
break;
}
}