using HighWayIot.Log4net; using HighWayIot.Winform.Business; using HighWayIot.Winform.UserControlPages; using HighWayIot.Winform.UserControlPages.MaterialConfigPages; using HighWayIot.Winform.UserControlPages.SysConfigPages; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; 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(); public BaseForm() { InitializeComponent(); Init(); } /// /// 初始化类 /// public void Init() { logger.Info("主页面已启动"); TimeDisplayTimer.Start(); NowLoginUserName.Text = RoleBusiness.LoginUserName; UserPanelSwitch(typeof(MonitorMainPage), "监控主页面"); RoleControl(); } /// /// 系统退出 /// /// /// 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 "测试页面": 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(EquipMaterialBindingPage), button.Text); break; case "生产排程": UserPanelSwitch(typeof(ProductionScheduling), 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; //使用TabControl控件的TabPages属性的Remove方法移除指定的选项卡 UserControlTabs.TabPages.Remove(UserControlTabs.SelectedTab); //删除列表里的实例 UserControls.RemoveAll(x => x.Tag.ToString() == selectedStr); } } /// /// 走不动道小时钟 /// /// /// 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); } } } }