namespace MesWork { using DC_A95; using System; using System.Diagnostics; using System.Drawing; using System.Threading; using System.Windows.Forms; /// /// 主窗体 - 称重数据采集分析管理系统 /// public partial class MesWorkForm { public static int Curr_AID = 0; /// /// 当前活跃的导航Panel /// private Panel _activeNavPanel = null; public MesWorkForm() { Frm_Login frm_Login = new Frm_Login(); if (frm_Login.ShowDialog() == DialogResult.OK) { OnStart(); InitializeComponent(); CheckForIllegalCrossThreadCalls = false; IsMdiContainer = false; // 加载窗口图标 LoadWindowIcon(); // 设置用户名 lbl_UserName.Text = $"操作员:{MesWorkForm.Curr_UserName}"; // 标题追加工位号 if (!string.IsNullOrEmpty(Curr_Station)) Text = $"称重数据采集分析管理系统 - {Curr_Station}"; // 启动定时器 timer_OnLine_Show.Interval = 1000; timer_OnLine_Show.Enabled = true; timer_Clock.Interval = 1000; timer_Clock.Enabled = true; // 启动SQL在线检测 CommunicationCheckOnLine(); // 初始化扫码枪 if (MesWorkForm.IsUseBarcode == 1) { BarcodeManager.Init(); BarcodeManager.OnBarcodeScanned = (opName, barcode) => { // 在线程池中执行业务处理(与PLC信号处理一致) System.Threading.ThreadPool.QueueUserWorkItem(_ => { try { Barcode_HandleScan(opName, barcode); } catch { } }); }; } // 默认选中"称重作业" SetActiveNav(pnl_NavWeighing); } else { Process.GetCurrentProcess().Kill(); } } // ==================================================================== // 导航系统 // ==================================================================== /// /// 统一导航点击事件 /// private void Nav_Click(object sender, EventArgs e) { // 获取真正的导航Panel(可能点的是Label子控件) Panel navPanel; if (sender is Label lbl) navPanel = lbl.Parent as Panel; else navPanel = sender as Panel; if (navPanel == null) return; string navTag = navPanel.Tag?.ToString() ?? ""; // 退出按钮特殊处理 if (navTag.Contains("退出")) { DoClose(); return; } // PLC监控特殊处理(弹出独立窗口) if (navTag.Contains("PLC")) { new OpcForm(IsDemoMesServer).Show(this); return; } // 日志查询 — 内嵌页面 if (navTag.Contains("日志")) { SetActiveNav(navPanel); return; } // 切换选中状态和内容 SetActiveNav(navPanel); } /// /// 设置当前选中的导航项,高亮+加载对应内容 /// private void SetActiveNav(Panel navPanel) { // 还原之前的选中项 if (_activeNavPanel != null) { _activeNavPanel.BackColor = Color.FromArgb(30, 58, 95); foreach (Control c in _activeNavPanel.Controls) if (c is Label l) l.ForeColor = Color.FromArgb(148, 163, 184); } // 高亮新选中项 _activeNavPanel = navPanel; _activeNavPanel.BackColor = Color.FromArgb(42, 74, 111); foreach (Control c in _activeNavPanel.Controls) if (c is Label l) l.ForeColor = Color.White; // 移动Active指示条 pnl_NavActiveIndicator.Top = navPanel.Top; pnl_NavActiveIndicator.Visible = true; // 加载对应内容 LoadContentByNav(navPanel.Tag?.ToString() ?? ""); } /// /// 页面实例缓存(避免重复创建,保持页面状态) /// private readonly System.Collections.Generic.Dictionary _pageCache = new System.Collections.Generic.Dictionary(); /// /// 根据导航Tag加载对应的UserControl /// private void LoadContentByNav(string navTag) { pnl_Content.Controls.Clear(); string pageKey = ""; UserControl uc = null; if (navTag.Contains("称重")) { pageKey = "weighing"; if (!_pageCache.ContainsKey(pageKey)) { var wp = new Pages.UC_Weighing(); _pageCache[pageKey] = wp; MesWorkForm.WeighingPage = wp; } } else if (navTag.Contains("用户")) { pageKey = "user"; if (!_pageCache.ContainsKey(pageKey)) _pageCache[pageKey] = new Pages.UC_UserMgmt(); } else if (navTag.Contains("工件")) { pageKey = "workpiece"; if (!_pageCache.ContainsKey(pageKey)) _pageCache[pageKey] = new Pages.UC_WorkpieceMgmt(); } else if (navTag.Contains("工具")) { pageKey = "tool"; if (!_pageCache.ContainsKey(pageKey)) _pageCache[pageKey] = new Pages.UC_ToolMgmt(); } else if (navTag.Contains("报告")) { pageKey = "report"; if (!_pageCache.ContainsKey(pageKey)) _pageCache[pageKey] = new Pages.UC_Report(); } else if (navTag.Contains("过站")) { pageKey = "station"; if (!_pageCache.ContainsKey(pageKey)) _pageCache[pageKey] = new Pages.UC_StationRecord(); } else if (navTag.Contains("统计")) { pageKey = "statistics"; if (!_pageCache.ContainsKey(pageKey)) _pageCache[pageKey] = new Pages.UC_Statistics(); } else if (navTag.Contains("设置")) { pageKey = "settings"; if (!_pageCache.ContainsKey(pageKey)) _pageCache[pageKey] = new Pages.UC_SystemSettings(); } else if (navTag.Contains("日志")) { pageKey = "log"; if (!_pageCache.ContainsKey(pageKey)) _pageCache[pageKey] = new Pages.UC_LogRecord(); } if (!string.IsNullOrEmpty(pageKey) && _pageCache.ContainsKey(pageKey)) { uc = _pageCache[pageKey]; uc.Dock = DockStyle.Fill; pnl_Content.Controls.Add(uc); } } // ==================================================================== // Timer Events // ==================================================================== /// /// 定时器:SQL在线状态刷新 + PLC信号灯等 /// private void timer_OnLine_Show_Tick(object sender, EventArgs e) { // 数据库在线状态指示(只变更指示灯颜色) if (OnLine_Sql) { pnl_SqlIndicator.BackColor = Color.FromArgb(16, 185, 129); // 绿色 } else { pnl_SqlIndicator.BackColor = Color.FromArgb(239, 68, 68); // 红色 } } /// /// 定时器:时钟刷新 /// private void timer_Clock_Tick(object sender, EventArgs e) { lbl_DateTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } // ==================================================================== // 窗口事件 // ==================================================================== private void MesWorkForm_Load(object sender, EventArgs e) { // 主界面加载完成 } private void MesWorkForm_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; } private void DoClose() { if (MessageBox.Show("是否确认退出程序?", "退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { timer_OnLine_Show.Enabled = false; timer_Clock.Enabled = false; CloseDeviceConn(); BarcodeManager.Shutdown(); B_DB_Opera.SaveLog_Request(Curr_Station, Log_Type.ZK_Login, "", Log_FromAndTo.ZK, Log_FromAndTo.ZK, $"用户[{Curr_UserName}({Curr_LoginID})]退出称重系统", out long AID); Process.GetCurrentProcess().Kill(); } } // ==================================================================== // 全屏切换 // ==================================================================== private void btn_ToggleFullscreen_Click(object sender, EventArgs e) { if (this.FormBorderStyle == FormBorderStyle.None) { // 退出全屏 → 恢复普通最大化 this.FormBorderStyle = FormBorderStyle.Sizable; this.WindowState = FormWindowState.Maximized; lbl_NavFullscreen.Text = "▣\n全屏"; } else { // 进入全屏 → 覆盖整个屏幕(含任务栏) this.FormBorderStyle = FormBorderStyle.None; this.WindowState = FormWindowState.Normal; this.Bounds = Screen.PrimaryScreen.Bounds; lbl_NavFullscreen.Text = "▣\n窗口"; } } // ==================================================================== // 窗口图标加载 // ==================================================================== /// /// 加载窗口图标(多路径搜索 + exe回退) /// private void LoadWindowIcon() { IconHelper.ApplyIcon(this); } } }