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(); } } }