BaseUtil.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. using DevExpress.XtraEditors;
  2. using DevExpress.XtraEditors.Repository;
  3. using System;
  4. using System.Data;
  5. using System.Runtime.InteropServices;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using UAS_PLCDataReader.DataOperate;
  9. using DevExpress.Utils;
  10. using UAS_PLCDataReader.CustomerControl.ValueLabel;
  11. using System.Collections.Generic;
  12. namespace UAS_PLCDataReader.PublicMethod
  13. {
  14. class BaseUtil
  15. {
  16. [DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")]
  17. public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);
  18. public static void FillComBoxEditWidthDataTable(RepositoryItemComboBox combo, string TextField, string ValueField, DataTable dt)
  19. {
  20. combo.Items.Clear();
  21. for (int i = 0; i < dt.Rows.Count; i++)
  22. {
  23. ComboBoxData item = new ComboBoxData();
  24. item.Value = dt.Rows[i][ValueField].ToString();
  25. item.Text = dt.Rows[i][TextField].ToString();
  26. combo.Items.Add(item);
  27. }
  28. }
  29. public static void FillComBoxEditWidthDataTable(ComboBoxEdit combo, string TextField, string ValueField, DataTable dt)
  30. {
  31. combo.Properties.Items.Clear();
  32. for (int i = 0; i < dt.Rows.Count; i++)
  33. {
  34. ComboBoxData item = new ComboBoxData();
  35. item.Value = dt.Rows[i][ValueField].ToString();
  36. item.Text = dt.Rows[i][TextField].ToString();
  37. combo.Properties.Items.Add(item);
  38. }
  39. combo.SelectedIndex = 0;
  40. }
  41. public static void FillComBoxEditWidthDataTable(ComboBoxEdit combo, string TextField, string ValueField, DataTable dt, bool AddAll)
  42. {
  43. combo.Properties.Items.Clear();
  44. if (AddAll)
  45. {
  46. ComboBoxData item = new ComboBoxData();
  47. item.Value = "全部";
  48. item.Text = "全部";
  49. combo.Properties.Items.Add(item);
  50. }
  51. for (int i = 0; i < dt.Rows.Count; i++)
  52. {
  53. ComboBoxData item = new ComboBoxData();
  54. item.Value = dt.Rows[i][ValueField].ToString();
  55. item.Text = dt.Rows[i][TextField].ToString();
  56. combo.Properties.Items.Add(item);
  57. }
  58. combo.SelectedIndex = 0;
  59. }
  60. public static DataTable ToDataTable(DataRow[] rows)
  61. {
  62. if (rows == null || rows.Length == 0) return new DataTable();
  63. DataTable tmp = rows[0].Table.Clone(); // 复制DataRow的表结构
  64. foreach (DataRow row in rows)
  65. tmp.Rows.Add(row.ItemArray); // 将DataRow添加到DataTable中
  66. return tmp;
  67. }
  68. public static string GetComboxEditValue(ComboBoxEdit ComBox)
  69. {
  70. if (ComBox.SelectedItem == null)
  71. return ComBox.Text;
  72. else
  73. return (ComBox.SelectedItem as ComboBoxData).Value;
  74. }
  75. /// <summary>
  76. /// 获取LRC
  77. /// </summary>
  78. /// <param name="SQL"></param>
  79. public static string getLRC(string SENDMESSAGE)
  80. {
  81. string message = SENDMESSAGE.Trim();
  82. if (message.Length % 2 != 0)
  83. {
  84. message = message + "0";
  85. }
  86. int LRC = 0x0;
  87. for (int i = 0; i < message.Length; i = i + 2)
  88. {
  89. int inside = int.Parse(message.Substring(i, 1).ToString() + message.Substring(i + 1, 1).ToString(), System.Globalization.NumberStyles.HexNumber);
  90. LRC += inside;
  91. }
  92. string _LRC = string.Format("{0:X2}", LRC);
  93. string LRCre = "";
  94. for (int i = 0; i < _LRC.Length; i++)
  95. {
  96. int index;
  97. index = 0xF - int.Parse(_LRC.Substring(i, 1).ToString(), System.Globalization.NumberStyles.HexNumber);
  98. LRCre += string.Format("{0:X}", index);
  99. }
  100. LRCre = string.Format("{0:X}", int.Parse(LRCre, System.Globalization.NumberStyles.HexNumber) + 1);
  101. return LRCre;
  102. }
  103. public static string ByteToHexadecimalString(byte[] b, int length)
  104. {
  105. string returnStr = "";
  106. if (b != null)
  107. {
  108. for (int i = 0; i < length; i++)
  109. {
  110. returnStr += Convert.ToString(b[i], 16);//ToString("X2") 为C#中的字符串格式控制符
  111. }
  112. }
  113. return returnStr;
  114. }
  115. public static void CleanMemory()
  116. {
  117. GC.Collect();
  118. GC.WaitForPendingFinalizers();
  119. if (Environment.OSVersion.Platform == PlatformID.Win32NT)
  120. {
  121. SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
  122. }
  123. }
  124. private static ToolTipControllerShowEventArgs args;
  125. public static ToolTipController MyToolTipClt { get; private set; }
  126. public static void NewToolTip(Control ctl, string title, string content, int showTime, ToolTipType toolTipType, ToolTipLocation tipLocation, bool isAutoHide, ToolTipIconType tipIconType, ImageList imgList, int imgIndex)
  127. {
  128. try
  129. {
  130. MyToolTipClt = new ToolTipController();
  131. args = MyToolTipClt.CreateShowArgs();
  132. content = (string.IsNullOrEmpty(content) ? "???" : content);
  133. title = string.IsNullOrEmpty(title) ? "温馨提示" : title;
  134. MyToolTipClt.ImageList = imgList;
  135. MyToolTipClt.ImageIndex = (imgList == null ? 0 : imgIndex);
  136. args.AutoHide = isAutoHide;
  137. MyToolTipClt.ShowBeak = true;
  138. MyToolTipClt.ShowShadow = true;
  139. MyToolTipClt.Rounded = true;
  140. MyToolTipClt.AutoPopDelay = (showTime == 0 ? 2000 : showTime);
  141. MyToolTipClt.SetToolTip(ctl, content);
  142. MyToolTipClt.SetTitle(ctl, title);
  143. MyToolTipClt.SetToolTipIconType(ctl, tipIconType);
  144. MyToolTipClt.Active = true;
  145. MyToolTipClt.HideHint();
  146. MyToolTipClt.ShowHint(content, title, ctl, tipLocation);
  147. }
  148. catch (Exception)
  149. {
  150. }
  151. }
  152. /// <summary>
  153. /// 传入控件的集合和DataTable,通过判断控件的名称和数据源的列的描述来匹配,支持单层的GroupBox和Panel
  154. /// </summary>
  155. /// <param name="collection"></param>
  156. /// <param name="dt"></param>
  157. public static void SetFormValue(Control.ControlCollection collection, DataTable dt)
  158. {
  159. //DataTable存在数据才进行赋值操作
  160. if (dt.Rows.Count > 0)
  161. {
  162. for (int i = 0; i < collection.Count; i++)
  163. {
  164. //如果含有子控件则进行递归调用
  165. if (collection[i].Controls.Count > 0)
  166. SetFormValue(collection[i].Controls, dt);
  167. string controlName = collection[i].Name;
  168. string controlsTag = collection[i].Tag == null ? "" : collection[i].Tag.ToString();
  169. //默认给TextBox和Label赋值
  170. if (collection[i] is TextBox || collection[i] is ValueLabel || collection[i] is NumericUpDown)
  171. {
  172. for (int j = 0; j < dt.Columns.Count; j++)
  173. {
  174. if (controlName.ToUpper() == dt.Columns[j].Caption.ToUpper() || controlsTag.ToUpper() == dt.Columns[j].Caption.ToUpper())
  175. {
  176. //字段含有Status内容的才进行转换
  177. if (controlName.ToUpper().Contains("STATUS") || controlsTag.ToUpper().Contains("STATUS"))
  178. {
  179. //对审批状态进行判断
  180. switch (dt.Rows[0][j].ToString().ToUpper())
  181. {
  182. case "ENTERING":
  183. collection[i].Text = "在录入";
  184. break;
  185. case "UNAPPROVED":
  186. collection[i].Text = "未批准";
  187. break;
  188. case "COMMITED":
  189. collection[i].Text = "已提交";
  190. break;
  191. case "APPROVE":
  192. collection[i].Text = "已批准";
  193. break;
  194. case "AUDITED":
  195. collection[i].Text = "已审核";
  196. break;
  197. case "STARTED":
  198. collection[i].Text = "已下放";
  199. break;
  200. case "UNCHECK":
  201. collection[i].Text = "待检验";
  202. break;
  203. case "CHECKING":
  204. collection[i].Text = "检验中";
  205. break;
  206. default:
  207. collection[i].Text = dt.Rows[0][j].ToString();
  208. break;
  209. }
  210. }
  211. else
  212. collection[i].Text = dt.Rows[0][j].ToString();
  213. }
  214. }
  215. }
  216. //对封装在GroupBox的和Panel的控件进行批量赋值
  217. if (collection[i] is GroupControl || collection[i] is Panel)
  218. {
  219. for (int j = 0; j < collection[i].Controls.Count; j++)
  220. {
  221. controlName = collection[i].Controls[j].Name;
  222. if (collection[i].Controls[j] is TextBox || collection[i].Controls[j] is ValueLabel)
  223. {
  224. for (int k = 0; k < dt.Columns.Count; k++)
  225. {
  226. if (controlName.ToUpper() == dt.Columns[k].Caption.ToUpper())
  227. {
  228. collection[i].Controls[j].Text = dt.Rows[0][k].ToString();
  229. }
  230. }
  231. }
  232. }
  233. }
  234. }
  235. }
  236. //如果没有记录的话,将dt中含有的列的对应值设置为空
  237. else
  238. {
  239. for (int i = 0; i < collection.Count; i++)
  240. {
  241. if (collection[i] is TextBox || collection[i] is ValueLabel)
  242. {
  243. for (int j = 0; j < dt.Columns.Count; j++)
  244. {
  245. if (collection[i].Name.ToUpper() == dt.Columns[j].Caption.ToUpper())
  246. {
  247. collection[i].Text = "";
  248. }
  249. }
  250. }
  251. }
  252. }
  253. }
  254. public static string ASCIIToString(string ASCII)
  255. {
  256. string ReturnStr = "";
  257. ASCII = ASCII.Replace(" ", "").Replace("3A", "").Replace("0D", "").Replace("0A", "");
  258. for (int i = 0; i < ASCII.Length; i = i + 2)
  259. {
  260. if (i + 2 < ASCII.Length)
  261. {
  262. switch (ASCII.Substring(i, 2))
  263. {
  264. case "30":
  265. ReturnStr += "0";
  266. break;
  267. case "31":
  268. ReturnStr += "1";
  269. break;
  270. case "32":
  271. ReturnStr += "2";
  272. break;
  273. case "33":
  274. ReturnStr += "3";
  275. break;
  276. case "34":
  277. ReturnStr += "4";
  278. break;
  279. case "35":
  280. ReturnStr += "5";
  281. break;
  282. case "36":
  283. ReturnStr += "6";
  284. break;
  285. case "37":
  286. ReturnStr += "7";
  287. break;
  288. case "38":
  289. ReturnStr += "8";
  290. break;
  291. case "39":
  292. ReturnStr += "9";
  293. break;
  294. case "41":
  295. ReturnStr += "A";
  296. break;
  297. case "42":
  298. ReturnStr += "B";
  299. break;
  300. case "43":
  301. ReturnStr += "C";
  302. break;
  303. case "44":
  304. ReturnStr += "D";
  305. break;
  306. case "45":
  307. ReturnStr += "E";
  308. break;
  309. case "46":
  310. ReturnStr += "F";
  311. break;
  312. default:
  313. break;
  314. }
  315. }
  316. }
  317. return ReturnStr;
  318. }
  319. public static int[] GetDecimalData(string HexStr, int DataSize)
  320. {
  321. //去除前面的指令字符和数据长度字符
  322. HexStr = HexStr.Replace(":", "");
  323. string RealData = HexStr.Substring(6);
  324. List<int> ReturnData = new List<int>();
  325. //每个地址位存的数据是DataSize个
  326. for (int i = 0; i < RealData.Length; i = i + DataSize)
  327. {
  328. if (i + DataSize < RealData.Length)
  329. {
  330. if (Convert.ToInt32("0x" + (RealData.Substring(i, DataSize).Substring(0, 4)), 16) / 1 != 0)
  331. ReturnData.Add(Convert.ToInt32("0x" + (RealData.Substring(i, DataSize).Substring(0, 4)), 16));
  332. else
  333. break;
  334. }
  335. }
  336. return ReturnData.ToArray();
  337. }
  338. }
  339. }