using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Repository;
using System;
using System.Data;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using UAS_PLCDataReader.DataOperate;
using DevExpress.Utils;
using UAS_PLCDataReader.CustomerControl.ValueLabel;
using System.Collections.Generic;
namespace UAS_PLCDataReader.PublicMethod
{
class BaseUtil
{
[DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")]
public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);
public static void FillComBoxEditWidthDataTable(RepositoryItemComboBox combo, string TextField, string ValueField, DataTable dt)
{
combo.Items.Clear();
for (int i = 0; i < dt.Rows.Count; i++)
{
ComboBoxData item = new ComboBoxData();
item.Value = dt.Rows[i][ValueField].ToString();
item.Text = dt.Rows[i][TextField].ToString();
combo.Items.Add(item);
}
}
public static void FillComBoxEditWidthDataTable(ComboBoxEdit combo, string TextField, string ValueField, DataTable dt)
{
combo.Properties.Items.Clear();
for (int i = 0; i < dt.Rows.Count; i++)
{
ComboBoxData item = new ComboBoxData();
item.Value = dt.Rows[i][ValueField].ToString();
item.Text = dt.Rows[i][TextField].ToString();
combo.Properties.Items.Add(item);
}
combo.SelectedIndex = 0;
}
public static void FillComBoxEditWidthDataTable(ComboBoxEdit combo, string TextField, string ValueField, DataTable dt, bool AddAll)
{
combo.Properties.Items.Clear();
if (AddAll)
{
ComboBoxData item = new ComboBoxData();
item.Value = "全部";
item.Text = "全部";
combo.Properties.Items.Add(item);
}
for (int i = 0; i < dt.Rows.Count; i++)
{
ComboBoxData item = new ComboBoxData();
item.Value = dt.Rows[i][ValueField].ToString();
item.Text = dt.Rows[i][TextField].ToString();
combo.Properties.Items.Add(item);
}
combo.SelectedIndex = 0;
}
public static DataTable ToDataTable(DataRow[] rows)
{
if (rows == null || rows.Length == 0) return new DataTable();
DataTable tmp = rows[0].Table.Clone(); // 复制DataRow的表结构
foreach (DataRow row in rows)
tmp.Rows.Add(row.ItemArray); // 将DataRow添加到DataTable中
return tmp;
}
public static string GetComboxEditValue(ComboBoxEdit ComBox)
{
if (ComBox.SelectedItem == null)
return ComBox.Text;
else
return (ComBox.SelectedItem as ComboBoxData).Value;
}
///
/// 获取LRC
///
///
public static string getLRC(string SENDMESSAGE)
{
string message = SENDMESSAGE.Trim();
if (message.Length % 2 != 0)
{
message = message + "0";
}
int LRC = 0x0;
for (int i = 0; i < message.Length; i = i + 2)
{
int inside = int.Parse(message.Substring(i, 1).ToString() + message.Substring(i + 1, 1).ToString(), System.Globalization.NumberStyles.HexNumber);
LRC += inside;
}
string _LRC = string.Format("{0:X2}", LRC);
string LRCre = "";
for (int i = 0; i < _LRC.Length; i++)
{
int index;
index = 0xF - int.Parse(_LRC.Substring(i, 1).ToString(), System.Globalization.NumberStyles.HexNumber);
LRCre += string.Format("{0:X}", index);
}
LRCre = string.Format("{0:X}", int.Parse(LRCre, System.Globalization.NumberStyles.HexNumber) + 1);
return LRCre;
}
public static string ByteToHexadecimalString(byte[] b, int length)
{
string returnStr = "";
if (b != null)
{
for (int i = 0; i < length; i++)
{
returnStr += Convert.ToString(b[i], 16);//ToString("X2") 为C#中的字符串格式控制符
}
}
return returnStr;
}
public static void CleanMemory()
{
GC.Collect();
GC.WaitForPendingFinalizers();
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
}
}
private static ToolTipControllerShowEventArgs args;
public static ToolTipController MyToolTipClt { get; private set; }
public static void NewToolTip(Control ctl, string title, string content, int showTime, ToolTipType toolTipType, ToolTipLocation tipLocation, bool isAutoHide, ToolTipIconType tipIconType, ImageList imgList, int imgIndex)
{
try
{
MyToolTipClt = new ToolTipController();
args = MyToolTipClt.CreateShowArgs();
content = (string.IsNullOrEmpty(content) ? "???" : content);
title = string.IsNullOrEmpty(title) ? "温馨提示" : title;
MyToolTipClt.ImageList = imgList;
MyToolTipClt.ImageIndex = (imgList == null ? 0 : imgIndex);
args.AutoHide = isAutoHide;
MyToolTipClt.ShowBeak = true;
MyToolTipClt.ShowShadow = true;
MyToolTipClt.Rounded = true;
MyToolTipClt.AutoPopDelay = (showTime == 0 ? 2000 : showTime);
MyToolTipClt.SetToolTip(ctl, content);
MyToolTipClt.SetTitle(ctl, title);
MyToolTipClt.SetToolTipIconType(ctl, tipIconType);
MyToolTipClt.Active = true;
MyToolTipClt.HideHint();
MyToolTipClt.ShowHint(content, title, ctl, tipLocation);
}
catch (Exception)
{
}
}
///
/// 传入控件的集合和DataTable,通过判断控件的名称和数据源的列的描述来匹配,支持单层的GroupBox和Panel
///
///
///
public static void SetFormValue(Control.ControlCollection collection, DataTable dt)
{
//DataTable存在数据才进行赋值操作
if (dt.Rows.Count > 0)
{
for (int i = 0; i < collection.Count; i++)
{
//如果含有子控件则进行递归调用
if (collection[i].Controls.Count > 0)
SetFormValue(collection[i].Controls, dt);
string controlName = collection[i].Name;
string controlsTag = collection[i].Tag == null ? "" : collection[i].Tag.ToString();
//默认给TextBox和Label赋值
if (collection[i] is TextBox || collection[i] is ValueLabel || collection[i] is NumericUpDown)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
if (controlName.ToUpper() == dt.Columns[j].Caption.ToUpper() || controlsTag.ToUpper() == dt.Columns[j].Caption.ToUpper())
{
//字段含有Status内容的才进行转换
if (controlName.ToUpper().Contains("STATUS") || controlsTag.ToUpper().Contains("STATUS"))
{
//对审批状态进行判断
switch (dt.Rows[0][j].ToString().ToUpper())
{
case "ENTERING":
collection[i].Text = "在录入";
break;
case "UNAPPROVED":
collection[i].Text = "未批准";
break;
case "COMMITED":
collection[i].Text = "已提交";
break;
case "APPROVE":
collection[i].Text = "已批准";
break;
case "AUDITED":
collection[i].Text = "已审核";
break;
case "STARTED":
collection[i].Text = "已下放";
break;
case "UNCHECK":
collection[i].Text = "待检验";
break;
case "CHECKING":
collection[i].Text = "检验中";
break;
default:
collection[i].Text = dt.Rows[0][j].ToString();
break;
}
}
else
collection[i].Text = dt.Rows[0][j].ToString();
}
}
}
//对封装在GroupBox的和Panel的控件进行批量赋值
if (collection[i] is GroupControl || collection[i] is Panel)
{
for (int j = 0; j < collection[i].Controls.Count; j++)
{
controlName = collection[i].Controls[j].Name;
if (collection[i].Controls[j] is TextBox || collection[i].Controls[j] is ValueLabel)
{
for (int k = 0; k < dt.Columns.Count; k++)
{
if (controlName.ToUpper() == dt.Columns[k].Caption.ToUpper())
{
collection[i].Controls[j].Text = dt.Rows[0][k].ToString();
}
}
}
}
}
}
}
//如果没有记录的话,将dt中含有的列的对应值设置为空
else
{
for (int i = 0; i < collection.Count; i++)
{
if (collection[i] is TextBox || collection[i] is ValueLabel)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
if (collection[i].Name.ToUpper() == dt.Columns[j].Caption.ToUpper())
{
collection[i].Text = "";
}
}
}
}
}
}
public static string ASCIIToString(string ASCII)
{
string ReturnStr = "";
ASCII = ASCII.Replace(" ", "").Replace("3A", "").Replace("0D", "").Replace("0A", "");
for (int i = 0; i < ASCII.Length; i = i + 2)
{
if (i + 2 < ASCII.Length)
{
switch (ASCII.Substring(i, 2))
{
case "30":
ReturnStr += "0";
break;
case "31":
ReturnStr += "1";
break;
case "32":
ReturnStr += "2";
break;
case "33":
ReturnStr += "3";
break;
case "34":
ReturnStr += "4";
break;
case "35":
ReturnStr += "5";
break;
case "36":
ReturnStr += "6";
break;
case "37":
ReturnStr += "7";
break;
case "38":
ReturnStr += "8";
break;
case "39":
ReturnStr += "9";
break;
case "41":
ReturnStr += "A";
break;
case "42":
ReturnStr += "B";
break;
case "43":
ReturnStr += "C";
break;
case "44":
ReturnStr += "D";
break;
case "45":
ReturnStr += "E";
break;
case "46":
ReturnStr += "F";
break;
default:
break;
}
}
}
return ReturnStr;
}
public static int[] GetDecimalData(string HexStr, int DataSize)
{
//去除前面的指令字符和数据长度字符
HexStr = HexStr.Replace(":", "");
string RealData = HexStr.Substring(6);
List ReturnData = new List();
//每个地址位存的数据是DataSize个
for (int i = 0; i < RealData.Length; i = i + DataSize)
{
if (i + DataSize < RealData.Length)
{
if (Convert.ToInt32("0x" + (RealData.Substring(i, DataSize).Substring(0, 4)), 16) / 1 != 0)
ReturnData.Add(Convert.ToInt32("0x" + (RealData.Substring(i, DataSize).Substring(0, 4)), 16));
else
break;
}
}
return ReturnData.ToArray();
}
}
}