using HighWayIot.Log4net; using HighWayIot.Plc; using HighWayIot.Winform.Business; using HighWayIot.Winform.UserControlPages; using HighWayIot.Winform.UserControlPages.MaterialConfigPages; using HighWayIot.Winform.UserControlPages.ParamConfigPages; using HighWayIot.Winform.UserControlPages.SysConfigPages; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics.Eventing.Reader; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using static System.Windows.Forms.VisualStyles.VisualStyleElement; namespace HighWayIot.Winform.MainForm { public partial class BaseForm : Form { /// /// 日志实例 /// private static LogHelper logger = LogHelper.Instance; /// /// 用户控件列表 /// List UserControls = new List(); /// /// 权限配置类 /// RoleBusiness roleBusiness = new RoleBusiness(); /// /// 工位RFID刷新类 /// WorkStationBusiness workStationBusiness = new WorkStationBusiness(); /// /// 配方排程刷新类 /// RecipeSendBusiness recipeSendBusiness = new RecipeSendBusiness(); /// /// 监控报表刷新类 /// MonitorDataRefreshBusiness monitorDataRefreshBusiness = new MonitorDataRefreshBusiness(); /// /// 定时报表导出 /// TimerExportBusiness timerExportBusiness = new TimerExportBusiness(); /// /// 排程combobox刷新 /// public static Action SchdulingRefreshAction; /// /// 底边栏消息提示刷新 /// public static Action LogRefreshAction; /// /// 开炼机PLC看门狗 0:正常 1:异常 2:未连接 /// public static int OpenMixMachineWatchDog = 2; /// /// 成型机PLC看门狗 0:正常 1:异常 2:未连接 /// public static int MoldingMachineWatchDog = 2; /// /// 上一个开炼机看门狗状态 /// public int LastOpenMixWatchDogNum = -1; /// /// 上一个成型机看门狗状态 /// public int LastMoldingMachineWatchDogNum = -1; public BaseForm() { InitializeComponent(); Init(); } /// /// 初始化类 /// public void Init() { logger.Info("主页面已启动"); TimeDisplayTimer.Start(); NowLoginUserName.Text = RoleBusiness.LoginUserName; UserPanelSwitch(typeof(MonitorMainPage), "监控主页面"); RoleControl(); SqlLogHelper.AddLog($"用户[{RoleBusiness.LoginUserName}]登录成功"); LogRefreshAction += (log) => { LogInformationToolStrip.Text = log; }; SchdulingRefreshAction += RefreshSchedulingNow; } /// /// 系统退出 /// /// /// private void SysQuitStripMenuItem_Click(object sender, EventArgs e) { Application.Exit(); } /// /// 注销 /// /// /// private void LogoutStripMenuItem_Click(object sender, EventArgs e) { Application.Restart(); } /// /// 菜单事件 /// /// /// private void StripMenuItemClick(object sender, EventArgs e) { if (sender is ToolStripMenuItem item && sender != null) { ToolStripMenuItem button = item; switch (button.Text) { case "角色管理": UserPanelSwitch(typeof(RoleConfigPage), button.Text); break; case "用户管理": UserPanelSwitch(typeof(UserConfigPage), button.Text); break; case "操作日志": UserPanelSwitch(typeof(OperateConfigPage), button.Text); break; case "报警日志": UserPanelSwitch(typeof(AlarmConfigPage), button.Text); break; case "监控主页面": UserPanelSwitch(typeof(MonitorMainPage), button.Text); break; case "PLC测试页面": UserPanelSwitch(typeof(TestPage), button.Text); break; case "班时间维护": UserPanelSwitch(typeof(ShiftTimePage), button.Text); break; case "物料管理": UserPanelSwitch(typeof(MaterialConfigPage), button.Text); break; case "物料类型管理": UserPanelSwitch(typeof(MaterialTypeConfigPage), button.Text); break; case "配方管理": UserPanelSwitch(typeof(RecipeConfigPage), button.Text); break; case "日报表": UserPanelSwitch(typeof(DailyReportPage), button.Text); break; case "机台物料信息绑定": UserPanelSwitch(typeof(EquipParamSettingPage), button.Text); break; case "硫化排程": UserPanelSwitch(typeof(ProductionScheduling), button.Text); break; case "RFID参数配置": UserPanelSwitch(typeof(RFIDParamSettingPage), button.Text); break; case "": break; default: MessageBox.Show("找不到按钮!"); break; } } } /// /// 切换前端页面,动态创建 /// /// Usercontrol类型 /// 名称标签 private void UserPanelSwitch(Type userControlType, string tag) { bool flag = false; foreach (UserControl us in UserControls) { if (us.GetType() == userControlType) { flag = true; //如果在标签页里,切换选项卡 if (UserControlTabs.Contains(us) || us.Tag.ToString() == tag) { try { foreach (Control control in this.UserControlTabs.Controls) { if (control is TabPage page) { if (page.Text == tag) { UserControlTabs.SelectedTab = page; } } } } catch (ArgumentNullException ex) { logger.Error("找不到相关标签页!请重启程序!", ex); } catch (Exception ex) { logger.Error("标签页未知错误!", ex); } } //如果不在标签页里 else { TabPage tabPage = new TabPage(tag); us.Parent = tabPage; UserControlTabs.TabPages.Add(tabPage); } break; } } if (!flag) { try { // 动态创建新的 UserControl 实例 object obj = Activator.CreateInstance(userControlType); if (obj is UserControl newControl) { newControl.Tag = tag; UserControls.Add(newControl); // 将新实例添加到列表 TabPage tabPage = new TabPage(tag); newControl.Parent = tabPage; newControl.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; newControl.Dock = DockStyle.Fill; UserControlTabs.TabPages.Add(tabPage); UserControlTabs.SelectedTab = tabPage; } else { throw new InvalidOperationException($"类型 {userControlType.Name} 不是有效的 UserControl 类型"); } } catch (Exception ex) { logger.Error("无法创建用户控件实例", ex); MessageBox.Show($"无法创建用户控件实例:{ex.Message}", "错误"); } } } /// /// 关闭当前选择的子窗口按钮 /// /// /// private void CloseButton_Click(object sender, EventArgs e) { // 删除时判断是否还存在TabPage if (UserControlTabs.SelectedIndex > -1) { string selectedStr = UserControlTabs.SelectedTab.Text; //获取当前标签页的索引 int selectedIndex = UserControlTabs.SelectedIndex; //使用TabControl控件的TabPages属性的Remove方法移除指定的选项卡 UserControlTabs.TabPages.Remove(UserControlTabs.SelectedTab); //删除列表里的实例 UserControls.RemoveAll(x => x.Tag.ToString() == selectedStr); //删除时如果标签没删干净,删完选择最后一个标签 if (UserControlTabs.TabCount != 0) { if (selectedIndex == 0) { UserControlTabs.SelectedTab = UserControlTabs.TabPages[0]; } else { UserControlTabs.SelectedTab = UserControlTabs.TabPages[selectedIndex - 1]; } } } } /// /// 走不动道小时钟 /// /// /// private void TimeDisplayTimer_Tick(object sender, EventArgs e) { TimeStripLabel.Text = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"); } /// /// 权限控制 /// private void RoleControl() { foreach (ToolStripMenuItem i in MainMenu.Items) { TraverseMenuitem(i); } } /// /// 递归遍历MenuItem /// /// private void TraverseMenuitem(ToolStripMenuItem item) { item.Enabled = roleBusiness.PageIsAccess(item.Text); //if(UserControls.Where(x => x.Tag == item.Text)) foreach (ToolStripMenuItem i in item.DropDownItems) { TraverseMenuitem(i); } } /// /// 配方下传方式转换 /// /// /// private void RecipeStateChangeButton_Click(object sender, EventArgs e) { RecipeSendBusiness.RecipeSendMode = !RecipeSendBusiness.RecipeSendMode; if (RecipeSendBusiness.RecipeSendMode) { ModeSelectLabel.Text = "自动"; ModeSelectLabel.BackColor = Color.FromArgb(100, 128, 255, 128); } else { ModeSelectLabel.Text = "手动"; ModeSelectLabel.BackColor = Color.FromArgb(100, 255, 255, 128); } } /// /// TabControl选项卡更改事件 /// /// /// private void TabControlChange(object sender, TabControlEventArgs e) { //硫化排程界面Combobox绑定更新更新 if (e.TabPage.Text == "硫化排程") { SchdulingRefreshAction.Invoke(); } } /// /// 刷新排程Combobox /// public void RefreshSchedulingNow() { UserControl control = UserControls.Where(x => x.Tag.ToString() == "硫化排程").Single(); if (control == null) { return; } if (control is ProductionScheduling) { ProductionScheduling productionScheduling = control as ProductionScheduling; productionScheduling.ComboBoxBind(); } } } }