using HalconDotNet; using LB_SmartVision.Tool; using System.Data; using System.Runtime.InteropServices; using System.Xml.Linq; namespace LB_SmartVision.Forms.Pages.ProcessPage { public partial class AllProcessesPage : TabPage { public ObservableConcurrentDictionary dicProcessControls = new ObservableConcurrentDictionary(); /// /// 实例化流程界面 /// /// public AllProcessesPage() { InitializeComponent(); Name = "AllProcessesPage"; Text = "主界面"; //this.Font = new Font("Microsoft YaHei UI", 16F, FontStyle.Regular, GraphicsUnit.Point, 0); this.BackColor = Color.FromArgb(32, 41, 50); InitVisionUI(); this.Invalidated += AllProcessesPage_Invalidated; } private void AllProcessesPage_Invalidated(object? sender, InvalidateEventArgs e) => InitVisionUI(); public void InitVisionUI() { List keys = dicProcessControls.Keys.ToList(); foreach (var title in keys) { bool isExist = false; foreach (var layout in GlobalVar.dicLayout.Values) { if (layout.Title == title) { isExist = true; break; } } if (!isExist) { if (dicProcessControls.ContainsKey(title)) { this.controlsPanel.Controls.Remove(dicProcessControls[title]); dicProcessControls.TryRemove(title, out _); } } } int enableLayout = 0; foreach (var layout in GlobalVar.dicLayout.Values) { if (GlobalVar.dicProcesses.ContainsKey(layout.ProcessName)) enableLayout++; } int index = 0; for (int i = 0; i < GlobalVar.dicLayout.Count; i++) { string name = GlobalVar.dicLayout[i].ProcessName; string title = GlobalVar.dicLayout[i].Title; if (GlobalVar.dicProcesses.ContainsKey(name)) { if (dicProcessControls.ContainsKey(title)) { ProcessControl processControl = dicProcessControls[title]; processControl.Size = new Size(this.controlsPanel.Size.Width / enableLayout , this.controlsPanel.Size.Height); processControl.Location = new Point(processControl.Size.Width * index, 0); if (GlobalVar.dicProcesses[name].GetImage(GlobalVar.dicLayout[i], out _, out HObject RecordImage)) dicProcessControls[title].ShowHoImage(RecordImage); } else { ProcessControl processControl = new ProcessControl(GlobalVar.dicLayout[i]); processControl.Size = new Size(this.controlsPanel.Size.Width / enableLayout , this.controlsPanel.Size.Height); processControl.Location = new Point(processControl.Size.Width * index, 0); processControl.SetTitle(title); dicProcessControls.TryAdd(title, processControl); this.controlsPanel.Controls.Add(processControl); if (GlobalVar.dicProcesses[name].GetImage(GlobalVar.dicLayout[i], out _, out HObject RecordImage)) dicProcessControls[title].ShowHoImage(RecordImage); } index++; } } } } }