using JinYuan.ControlLib; using JinYuan.Models; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Text; using System.Linq; using System.Threading; using System.Windows.Forms; using JinYuan.VirtualDataLibrary; using JinYuan.ControlCenters; using JinYuan.Helper; using System.Runtime.InteropServices; using System.Threading.Tasks; namespace LargeSquareOne { public partial class FrmMain : Form { //实时更新的定时器 private System.Windows.Forms.Timer updateTimer; public FrmMain() { InitializeComponent(); #region 字体加载 // 加载字体文件 font.AddFontFile(Environment.CurrentDirectory + "\\Assts\\Fonts\\FZY4JW.ttf"); //定义成新的字体对象 FontFamily myFontFamily = new FontFamily(font.Families[0].Name, font); myFont = new Font(myFontFamily, 21, System.Drawing.FontStyle.Regular); lbl_TitleBar.Font = myFont; // 设置背景图片 //this._backgroundImage = Image.FromFile(System.Windows.Forms.Application.StartupPath + "\\Assts\\Image\\BackGround.png"); #endregion #region 添加工具栏 naviButton2s.Add(this.nav_Monitor); naviButton2s.Add(this.nav_DataMonitor); naviButton2s.Add(this.nav_CPK); naviButton2s.Add(this.nav_AlarmLog); naviButton2s.Add(this.nav_HistotryData); naviButton2s.Add(this.nav_SetSystem); naviButton2s.Add(this.nav_System); naviButton2s.Add(this.nav_User); #endregion this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.SetStyle(ControlStyles.DoubleBuffer, true); this.SetStyle(ControlStyles.ResizeRedraw, true); this.SetStyle(ControlStyles.Selectable, true); this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); this.SetStyle(ControlStyles.UserPaint, true); storeTimer = new System.Timers.Timer(); storeTimer.Interval = 1000; storeTimer.AutoReset = true; storeTimer.Elapsed += StoreTimer_Elapsed; //开启定时器 storeTimer.Start(); updateTimer = new System.Windows.Forms.Timer(); updateTimer.Interval = 200; updateTimer.Tick += UpdateTimer_Tick; updateTimer.Start(); CommonMethods.listener.ScanerEvent += Listener_ScanerEvent; CommonMethods.listener.Start(); this.Load += FrmMain_Load; this.FormClosing += FrmMain_FormClosing; } //加载字体 private PrivateFontCollection font = new PrivateFontCollection(); Font myFont = null; private Image _backgroundImage; //定时存储定时器 private System.Timers.Timer storeTimer; /// /// 时间更新委托 /// /// public delegate void ShowTimeHandler(DateTime time); //当前页面索引 private int CurrentIndex = 0; private List naviButton2s = new List(); /// /// 全局钩子 /// private void FrmMain_Load(object sender, EventArgs e) { InitReadInI(); UserTimeOut(30); ControlCenter controlCenter = ControlCenter.Instance; //1.设置登录用户 this.lbl_LoginLevel.Text = CommonMethods.currentAdmin?.LoginLevel; this.lbl_LoginName.Text = CommonMethods.currentAdmin?.LoginName; //2.打开日志报警窗体 CommonNaviButton_Click(this.nav_AlarmLog, null); //2.打开图表窗体 CommonNaviButton_Click(this.nav_Monitor, null); //打开集中监控窗体 CommonNaviButton_Click(this.nav_DataMonitor, null); //登录日志 CommonMethods.AddOPLog(false, $"登录成功,登录用户:{CommonMethods.currentAdmin?.LoginName},权限:{CommonMethods.currentAdmin?.LoginLevel}"); //自动锁屏 if (CommonMethods.sysConfig.AutoLock) { //开启监听键盘和鼠标操作 Application.AddMessageFilter(new MessageFilter()); } // if (CommonMethods.sysConfig != null) { CommonMethods.AddLog(false, "加载系统配置成功"); } else { CommonMethods.AddLog(true, "加载系统配置失败"); } if (CommonMethods.sysConfig.MesModeSwitching && !CommonMethods.mesConfig.IsLoginMesOK) { new FrmMsgBoxOutWithAck(2, "当前为MES模式,请登录!", "MES未登录").ShowDialog(); FrmLoginMes frmLoginMes = new FrmLoginMes(); frmLoginMes.ShowDialog(); } } #region 读取配置文件 /// /// 读取配置文件 /// public void InitReadInI() { CommonMethods.sysConfig.MesModeSwitching = Convert.ToBoolean(IniConfigHelper.ReadIniData("配置信息", "MES/非MES模式切换", "False")); CommonMethods.sysConfig.GetMesParam = Convert.ToBoolean(IniConfigHelper.ReadIniData("配置信息", "是否获取MES参数", "False")); CommonMethods.mesConfig.IsGet_Server = IniConfigHelper.ReadIniData("配置信息", "是否获取服务器数据", "1") == "1" ? true : false; CommonMethods.sysConfig.OKSwitching = Convert.ToBoolean(IniConfigHelper.ReadIniData("配置信息", "强制OK/正常NG模式切换", "False")); CommonMethods.mesConfig.IsGet_3C = IniConfigHelper.ReadIniData("配置信息", "是否存储C模块数据", "1") == "1" ? true : false; CommonMethods.mesConfig._卷芯条码计数 = Convert.ToInt32(IniConfigHelper.ReadIniData("配置信息", "卷芯条码计数", "false")); CommonMethods.mesConfig.siteCode = IniConfigHelper.ReadIniData("MES配置", "工厂代码", "false"); CommonMethods.mesConfig.lineCode = IniConfigHelper.ReadIniData("MES配置", "产线编号", "false"); CommonMethods.mesConfig.equipNum = IniConfigHelper.ReadIniData("MES配置", "设备编号", "false"); CommonMethods.mesConfig.electricMeterNum.Clear(); string str = IniConfigHelper.ReadIniData("MES配置", "智能电表编号", "1"); if (str.Contains(',')) { string[] strArray = str.Split(','); for (int i = 0; i < strArray.Length; i++) { CommonMethods.mesConfig.electricMeterNum.Add(strArray[i]); } } CommonMethods.mesConfig.listAntiDustAirSpeedNum.Clear(); CommonMethods.mesConfig.AntiDustAirSpeedCount = Convert.ToInt32(IniConfigHelper.ReadIniData("风速仪", "AntiDustAirSpeedCount", "0")); for (int i = 0; i < CommonMethods.mesConfig.AntiDustAirSpeedCount; i++) { CommonMethods.mesConfig.listAntiDustAirSpeedNum.Add(IniConfigHelper.ReadIniData("风速仪", $"AntiDustAirSpeed{i + 1}", "0")); } CommonMethods.mesConfig.EquStatuasTime = int.Parse(IniConfigHelper.ReadIniData("MES配置", "EquStatuasTime", "0")); CommonMethods.ChangeClassTime = IniConfigHelper.ReadIniData("MES配置", "白夜班交替时间", "0"); CommonMethods.strDeletepath = IniConfigHelper.ReadIniData("MES配置", "MES日志保存路径", "0") + "\\"; CommonMethods.strAlarmLogspath = IniConfigHelper.ReadIniData("MES配置", "MES日志保存路径", "0") + "\\Logs\\AlarmLogs\\"; CommonMethods.strMesLogspath = IniConfigHelper.ReadIniData("MES配置", "MES日志保存路径", "0") + "\\Logs\\MesLogs"; CommonMethods.strSystemLogspath = IniConfigHelper.ReadIniData("MES配置", "MES日志保存路径", "0") + "\\Logs\\SystemLogs"; CommonMethods.strErrorLogspath = IniConfigHelper.ReadIniData("MES配置", "MES日志保存路径", "0") + "\\Logs\\ErrorLogs"; CommonMethods.strsqlLogspath = IniConfigHelper.ReadIniData("MES配置", "MES日志保存路径", "0") + "\\Logs\\SqlLogs\\"; CommonMethods.strWattrMeterpath = IniConfigHelper.ReadIniData("MES配置", "MES日志保存路径", "0") + "\\Logs\\智能电表数据\\"; CommonMethods.mesConfig.RotueServerIP = IniConfigHelper.ReadIniData("MES配置", "存储服务器IP地址", "192.168.2.108"); CommonMethods.mesConfig.LoginMesUrl = IniConfigHelper.ReadIniData("MES配置", "员工权限校验", "0"); CommonMethods.mesConfig.ParamSetpointRequestMesUrl = IniConfigHelper.ReadIniData("MES配置", "设备参数设定值请求", "0"); CommonMethods.mesConfig.ChangeParamSetValueMesUrl = IniConfigHelper.ReadIniData("MES配置", "设备参数设定值变更", "0"); CommonMethods.mesConfig.InPutStationMesUrl = IniConfigHelper.ReadIniData("MES配置", "产品进站", "0"); CommonMethods.mesConfig.EquProcessProcessParamMesUrl = IniConfigHelper.ReadIniData("MES配置", "产品过程加工参数", "0"); CommonMethods.mesConfig.ResultProcessParamMesUrl = IniConfigHelper.ReadIniData("MES配置", "产品结果加工参数", "0"); CommonMethods.mesConfig.OutStationMesUrl = IniConfigHelper.ReadIniData("MES配置", "产品出站", "0"); CommonMethods.mesConfig.AlarmCurrencyMesUrl = IniConfigHelper.ReadIniData("MES配置", "设备报警", "0"); CommonMethods.mesConfig.StatusMesUrl = IniConfigHelper.ReadIniData("MES配置", "设备状态", "0"); CommonMethods.mesConfig.WattrMeterUrl = IniConfigHelper.ReadIniData("MES配置", "能耗", "0"); CommonMethods.mesConfig.CollectData = IniConfigHelper.ReadIniData("MES配置", "风速仪", "0"); //CommonMethods.ProdDRFIDNgQty = Convert.ToInt32(IniConfigHelper.ReadIniData("统计计数", "ProdDRFIDNgQty", "0")); //CommonMethods.ProdDXNgQty = Convert.ToInt32(IniConfigHelper.ReadIniData("统计计数", "ProdDXNgQty", "0")); //CommonMethods.ProdGRFIDNgQty = Convert.ToInt32(IniConfigHelper.ReadIniData("统计计数", "ProdGRFIDNgQty", "0")); //CommonMethods.ProdYLZNgQty = Convert.ToInt32(IniConfigHelper.ReadIniData("统计计数", "ProdYLZNgQty", "0")); } #endregion #region 无操作 系统锁屏+切换到主监控界面 private void UpdateTimer_Tick(object sender, EventArgs e) { if (CommonMethods.sysConfig.AutoLock) { CommonMethods.tickCount++; if (CommonMethods.tickCount == CommonMethods.sysConfig.LockPeriod * 60 * 1000 / this.updateTimer.Interval) { //锁屏 LockWorkStation(); } } if (CommonMethods.sysConfig.AutoQieHuanM) { CommonMethods.tickHomeCount++; if (CommonMethods.tickHomeCount == CommonMethods.sysConfig.QieHuanMPeriod * 60 * 1000 / this.updateTimer.Interval) { //切换集中监控窗体 CommonNaviButton_Click(this.nav_Monitor, null); } } } [DllImport("user32")] public static extern bool LockWorkStation(); #endregion /// /// 刷卡事件 /// /// private void Listener_ScanerEvent(ScanerHook.ScanerCodes codes) { //封装对象 SysAdmin sysAdmin = new SysAdmin() { LoginUid = codes.Result, }; //调用查询方法 sysAdmin = CommonMethods.db.Query(it => it.LoginUid == sysAdmin.LoginUid); if (sysAdmin == null) { new FrmMsgBoxOutWithAck(3, "登录用户或密码错误!!!", "登录提示").ShowDialog(); return; } else { this.DialogResult = DialogResult.OK; CommonMethods.IsLoginOk = true; //存储用户对象 CommonMethods.currentAdmin = sysAdmin; //1.设置登录用户 this.lbl_LoginLevel.Text = CommonMethods.currentAdmin?.LoginLevel; this.lbl_LoginName.Text = CommonMethods.currentAdmin?.LoginName; //登录日志 CommonMethods.AddOPLog(false, $"登录成功,登录用户:{CommonMethods.currentAdmin?.LoginName},权限:{CommonMethods.currentAdmin?.LoginLevel}"); } } private void StoreTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { #region 时间异步 DateTime time = DateTime.Now; ShowTimeHandler handler = ShowButtonEven_Run; IAsyncResult result = handler.BeginInvoke(time, null, handler); #endregion } #region 获取日期/星期,班次信息,更新 private void ShowButtonEven_Run(DateTime time) { try { this.Invoke(new Action(() => { //this.led_StopState.Value = CommonMethods.EMCStatues; this.lbl_DateTime.Text = CurrentTime + " " + week + " " + $"{CommonMethods.strClass}"; if (CommonMethods.plcDevice != null) { this.led_PLCState.Value = CommonMethods.plcDevice.IsConnected; } if (CommonMethods.sysConfig.MesModeSwitching && CommonMethods.mesConfig.IsLoginMesOK)//MES { CommonMethods.mesConfig.isUpMes = true; this.led_MESState.Value = true; lblMS.Visible = true; lblMES.Visible = true; lblMES.Text = CommonMethods.mesConfig.mesUserName; } else { CommonMethods.mesConfig.isUpMes = false; lblMS.Visible = false; lblMES.Visible = false; this.led_MESState.Value = false; } if (CommonMethods.sysConfig.SwipeCardMode && !CommonMethods.IsLoginOk)//刷卡模式 { lbl_LoginName.Visible = false; lbl_LoginLevel.Text = "未登录"; } else { lbl_LoginName.Visible = true; } if (CommonMethods.sysConfig.ScreenCutting) { CommonNaviButton_Click(this.nav_DataMonitor, null); CommonMethods.sysConfig.ScreenCutting = false; } if (CommonMethods.Statues != null && CommonMethods.Statues.Count > 0) { this.led_RunState.Value = CommonMethods.Statues[0]; //this.led_StopState.BlinkOn = CommonMethods.Statues[1]; this.led_AlarmState.BlinkOn = CommonMethods.Statues[2]; this.led_IldeState.BlinkOn = CommonMethods.Statues[3]; if (!CommonMethods.Statues[2]) { string SlideAlarm = "当前无报警"; this.ucRollText1.Text = SlideAlarm; this.ucRollText1.ForeColor = Color.White; CommonMethods.SlideAlarmText = ""; } else { this.ucRollText1.Text = CommonMethods.SlideAlarmText; this.ucRollText1.ForeColor = Color.Red; } } })); } catch (Exception ex) { LogHelper.Instance.WriteEX(ex); } } private string CurrentTime { get { return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } } private string[] weeks = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; private string week { get { return weeks[Convert.ToInt32(DateTime.Now.DayOfWeek)]; } } #endregion #region 屏蔽 //private void DeviceCommunication(Device device) //{ // while (!cts.IsCancellationRequested) // { // if (device.IsConnected) // { // //通信读取 // foreach (var gp in device.GroupList) // { // byte[] data = null; // int reqLength = 0; // if (gp.StoreArea == "输入线圈" || gp.StoreArea == "输出线圈") // { // switch (gp.StoreArea) // { // case "输入线圈": // //data = CommonMethods.Modbus.ReadBoolArray(gp.Start, gp.Length); // reqLength = ShortLib.GetByteLengthFromBoolLength(gp.Length); // break; // case "输出线圈": // //data = CommonMethods.Modbus.WriteBoolArray(gp.Start, gp.Length); // reqLength = ShortLib.GetByteLengthFromBoolLength(gp.Length); // break; // default: // break; // } // if (data != null && data.Length == reqLength) // { // //变量解析 // foreach (var variable in gp.VarList) // { // DataType dataType = (DataType)Enum.Parse((typeof(DataType)), variable.DataType, true); // int start = variable.Start - gp.Start; // switch (dataType) // { // case DataType.Bool: // variable.VarValue = BitLib.GetBitFromByteArray(data, start, variable.OffsetOrLenght); // break; // default: // break; // } // //处理 // //直接更新 // device.UpdataVariable(variable); // } // } // else // { // device.IsConnected = false; // break; // } // } // else // { // switch (gp.StoreArea) // { // case "输入寄存器": // //data = CommonMethods.Modbus.(gp.Start, gp.Length); // reqLength = gp.Length * 2; // break; // case "输出寄存器": // //data = CommonMethods.Modbus.ReadOutputRegisters(gp.Start, gp.Length); // reqLength = gp.Length * 2; // break; // default: // break; // } // if (data != null && data.Length == reqLength) // { // //变量解析 // foreach (var variable in gp.VarList) // { // DataType dataType = (DataType)Enum.Parse((typeof(DataType)), variable.DataType, true); // int start = variable.Start - gp.Start; // start *= 2; // switch (dataType) // { // case DataType.Bool: // variable.VarValue = BitLib.GetBitFrom2BytesArray(data, start, // variable.OffsetOrLenght, dataFormat == DataConvertLib.DataFormat.BADC || dataFormat == DataConvertLib.DataFormat.DCBA); // break; // case DataType.Byte: // variable.VarValue = ByteLib.GetByteFromByteArray(data, // dataFormat == DataConvertLib.DataFormat.BADC || dataFormat == DataConvertLib.DataFormat.DCBA ? start : start + 1); // break; // case DataType.Short: // variable.VarValue = ShortLib.GetShortFromByteArray(data, start, dataFormat); // break; // case DataType.Int: // variable.VarValue = ShortLib.GetShortFromByteArray(data, start, dataFormat); // break; // case DataType.UInt: // variable.VarValue = UIntLib.GetUIntFromByteArray(data, start, dataFormat); // break; // case DataType.Float: // variable.VarValue = FloatLib.GetFloatFromByteArray(data, start, dataFormat); // break; // case DataType.Double: // variable.VarValue = DoubleLib.GetDoubleFromByteArray(data, start, dataFormat); // break; // case DataType.Long: // variable.VarValue = LongLib.GetLongFromByteArray(data, start, dataFormat); // break; // case DataType.ULong: // variable.VarValue = ULongLib.GetULongFromByteArray(data, start, dataFormat); // break; // case DataType.String: // variable.VarValue = StringLib.GetStringFromByteArrayByEncoding(data, start, variable.OffsetOrLenght, // Encoding.ASCII); // break; // case DataType.ByteArray: // variable.VarValue = ByteArrayLib.GetByteArrayFromByteArray(data, start, variable.OffsetOrLenght); // break; // case DataType.HexString: // variable.VarValue = StringLib.GetHexStringFromByteArray(data, start, variable.OffsetOrLenght); // break; // default: // break; // } // //处理 // //先做线性转换,再更新 // variable.VarValue = MigrationLib.GetMigrationValue(variable.VarValue, variable.Scale.ToString(), // variable.Offset.ToString()).Content; // device.UpdataVariable(variable); // } // } // else // { // device.IsConnected = false; // break; // } // } // } // } // else // { // //非首次连接,需要延时 // if (device.ReConnectSign) // { // CommonMethods.Modbus?.DisConnect(); // Thread.Sleep(device.ReConnectTime); // } // //通信连接 // CommonMethods.Modbus = new ModbusTCP(); // device.IsConnected = CommonMethods.Modbus.Connect(device.IPAddress, device.Port); // if (device.ReConnectSign) // { // CommonMethods.AddLog(device.IsConnected ? false : true, device.IsConnected ? "控制器重连成功" : "控制器重连失败"); // } // else // { // CommonMethods.AddLog(device.IsConnected ? false : true, device.IsConnected ? "控制器初次连接成功" : "控制器初次连接失败"); // device.ReConnectSign = true; // } // } // } //} #endregion #region 界面操作 #region 加载背景图像 //重绘背景放置闪烁 //protected override void OnPaintBackground(PaintEventArgs e) //{ // // 使用DrawImage方法绘制背景图片 // e.Graphics.DrawImage(_backgroundImage, 0, 0, this.ClientSize.Width, this.ClientSize.Height); //} #endregion #region 减少闪烁 protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } } #endregion #region 无边框拖动 private System.Drawing.Point mPoint; private void Panel_MouseDown(object sender, MouseEventArgs e) { mPoint = new System.Drawing.Point(e.X, e.Y); } private void Panel_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { this.Location = new System.Drawing.Point(this.Location.X + e.X - mPoint.X, this.Location.Y + e.Y - mPoint.Y); } } #endregion #region 左右切换 private void btn_Left_Click(object sender, EventArgs e) { CurrentIndex--; if (CurrentIndex >= 0) { CommonNaviButton_Click(naviButton2s[CurrentIndex], null); } else { CurrentIndex++; } } private void btn_right_Click(object sender, EventArgs e) { CurrentIndex++; if (CurrentIndex < naviButton2s.Count) { CommonNaviButton_Click(naviButton2s[CurrentIndex], null); } else { CurrentIndex--; } } #endregion #region 通用窗体切换 /// /// 通用窗体切换 /// /// /// private void CommonNaviButton_Click(object sender, EventArgs e) { if (sender is NaviButton2 navi) { if (Enum.IsDefined(typeof(FormNames), navi.TitleName)) { //拿到导航按钮对应的窗体枚举值 FormNames formNames = (FormNames)Enum.Parse(typeof(FormNames), navi.TitleName, true); //用户权限处理 switch (formNames) { case FormNames.日志报警: if (CommonMethods.IsLoginOk) { if (!CommonMethods.currentAdmin.SystemLog) { new FrmMsgBoxOutWithAck(2, "当前登录用户权限不足!", "权限不足").ShowDialog(); return; } } else { new FrmMsgBoxOutWithAck(2, "请先刷卡登录!", "登录系统").ShowDialog(); return; } break; case FormNames.数据分析: // new FrmMsgBoxOutWithAck(2, "功能待开发中…………", "品质测量").ShowDialog(); //return; if (CommonMethods.IsLoginOk) { if (!CommonMethods.currentAdmin.SystemLog) { new FrmMsgBoxOutWithAck(2, "当前登录用户权限不足!", "权限不足").ShowDialog(); return; } } else { new FrmMsgBoxOutWithAck(2, "请先刷卡登录!", "登录系统").ShowDialog(); return; } //if (!CommonMethods.currentAdmin.CpkData) //{ // new FrmMsgBoxOutWithAck(2, "当前登录用户权限不足!", "权限不足").ShowDialog(); // return; //} break; case FormNames.数据追溯: if (CommonMethods.IsLoginOk) { if (!CommonMethods.currentAdmin.HistoryData) { new FrmMsgBoxOutWithAck(2, "当前登录用户权限不足!", "权限不足").ShowDialog(); return; } } else { new FrmMsgBoxOutWithAck(2, "请先刷卡登录!", "登录系统").ShowDialog(); return; } break; case FormNames.参数设置: if (CommonMethods.IsLoginOk) { if (!CommonMethods.currentAdmin.ParamSet) { new FrmMsgBoxOutWithAck(2, "当前登录用户权限不足!", "权限不足").ShowDialog(); return; } } else { new FrmMsgBoxOutWithAck(2, "请先刷卡登录!", "登录系统").ShowDialog(); return; } break; case FormNames.系统设置: if (CommonMethods.IsLoginOk) { if (!CommonMethods.currentAdmin.UserManage) { new FrmMsgBoxOutWithAck(2, "当前登录用户权限不足!", "权限不足").ShowDialog(); return; } } else { new FrmMsgBoxOutWithAck(2, "请先刷卡登录!", "登录系统").ShowDialog(); return; } break; case FormNames.用户管理: if (CommonMethods.IsLoginOk) { if (!CommonMethods.currentAdmin.SystemLog) { new FrmMsgBoxOutWithAck(2, "当前登录用户权限不足!", "权限不足").ShowDialog(); return; } } else { new FrmMsgBoxOutWithAck(2, "请先刷卡登录!", "登录系统").ShowDialog(); return; } break; default: break; } //窗体切换 OpenForm(this.MainPanel, formNames); //设置Title SetTitle(this.lbl_Title, formNames); //设置选中 SetNaviButtonSelected(this.TopPanel, navi); } } } /// /// 通用打开窗体 /// /// 容器控件 /// 窗体枚举名称 private void OpenForm(Panel mainPanel, FormNames formNames) { int total = mainPanel.Controls.Count; int closeCount = 0; bool isFind = false; for (int i = 0; i < total; i++) { Control ct = mainPanel.Controls[i - closeCount]; if (ct is Form frm) { //如果当前Form是我们需要操作的窗体 if (frm.Text == formNames.ToString()) { frm.BringToFront(); isFind = true; break; } //如果当前Form不是我们需要操作的窗体,然后判断是否为固定窗体,如果不是,则关闭,如果是,则不做处理 else if ((FormNames)Enum.Parse(typeof(FormNames), frm.Text, true) >= FormNames.临界窗体) { frm.Close(); closeCount++; } } } if (!isFind) { Form frm = null; switch (formNames) { case FormNames.集中监控: frm = new FrmMonitor(); break; case FormNames.数据监控: frm = new FrmDataMonitor(); CommonMethods.AddDataMonitorDelegate += ((FrmDataMonitor)frm).AddDataMonitorLog;//日志记录显示 CommonMethods.ShowFeedingDelegate += ((FrmDataMonitor)frm).ShowFeedingData;//上料显示 CommonMethods.ShowBlankingDelegate += ((FrmDataMonitor)frm).ShowBankdingData;//下料显示 CommonMethods.ChangeParamDelegate += ((FrmDataMonitor)frm).GetLocalParaData;//参数更新 break; case FormNames.日志报警: frm = new FrmAlarmLog(); //绑定委托 CommonMethods.AddLogDelegate += ((FrmAlarmLog)frm).AddLog;//系统日志 CommonMethods.AddOPLogDelegate += ((FrmAlarmLog)frm).AddOPLog;//操作日志 CommonMethods.AddAlarmDelegate += ((FrmAlarmLog)frm).AddAlarm;//报警日志 CommonMethods.ShowAlarmDelegate += ((FrmAlarmLog)frm).ShowAlarm; break; case FormNames.临界窗体: break; case FormNames.数据分析: frm = new FrmCpkCount(); break; case FormNames.数据追溯: frm = new FrmHistory(); break; case FormNames.参数设置: frm = new FrmRecipe(); break; case FormNames.系统设置: frm = new FrmSystemSet(CommonMethods.devPath); break; case FormNames.用户管理: frm = new FrmUserManage(); break; default: break; } if (frm != null) { //设置非顶层窗体 frm.TopLevel = false; //去除边框 frm.FormBorderStyle = FormBorderStyle.None; //填充 frm.Dock = DockStyle.Fill; //设置父容器为容器控件 frm.Parent = mainPanel; //置前 frm.BringToFront(); frm.Show(); } } } /// /// 设置标题内容 /// /// 标题控件 /// 窗体枚举名称 private void SetTitle(Label label, FormNames formNames) { label.Text = formNames.ToString(); } /// /// 设置导航按钮选中 /// /// 导航按钮的容器 /// 导航按钮 private void SetNaviButtonSelected(Panel topPanel, NaviButton2 naviButton) { foreach (var item in topPanel.Controls.OfType()) { item.IsSelected = false; } naviButton.IsSelected = true; } #endregion #region 退出确认 private void btExit_MouseDown(object sender, MouseEventArgs e) { this.Close(); } private void btnScale_Click(object sender, EventArgs e) { this.Visible = false; } private void FrmMain_SizeChanged(object sender, EventArgs e) { //当窗体最小化时 if (!this.Visible) { this.Visible = false; notifyIcon1.Visible = true; } else { this.Visible = true; notifyIcon1.Visible = true; } } private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { //显示窗体 this.Visible = true; //恢复窗体尺寸状态 this.WindowState = FormWindowState.Normal; } } private void 关于_Click(object sender, EventArgs e) { FrmHelper frmHelper = new FrmHelper(); frmHelper.ShowDialog(); } private void 隐藏主界面_Click(object sender, EventArgs e) { this.Visible = false; } private void 显示主界面_Click(object sender, EventArgs e) { //显示窗体 this.Visible = true; //恢复窗体尺寸状态 this.WindowState = FormWindowState.Normal; } private void 退出_Click(object sender, EventArgs e) { this.Close(); } private void FrmMain_FormClosing(object sender, FormClosingEventArgs e) { DialogResult dialogResult = new FrmMsgBoxWithAck("是否确定要退出系统", "退出系统").ShowDialog(); if (dialogResult == DialogResult.OK) { //关闭存储定时器 this.storeTimer.Stop(); this.updateTimer.Stop(); CommonMethods.listener.Stop(); //关闭线程 CommonMethods.IsExit = true; CommonMethods.plcDevice?.Cts?.Cancel(); CommonMethods.PlcLink?.Disconnect(); Thread.Sleep(500); notifyIcon1.Dispose(); this.Dispose();//清理正在使用的资源 `在这里插入代码片` System.Environment.Exit(0);//退出全部线程 System.Diagnostics.Process.GetCurrentProcess().Kill(); } else { e.Cancel = true; } } #endregion /// /// 获取鼠标光标的当前位置 /// /// /// [DllImport("user32.dll")] public static extern bool GetCursorPos(out Point pt); /// /// 刷卡用户登录超时检查 /// /// private void UserTimeOut(int secTime) { Task task = Task.Run(() => { for (int i = 0; i < secTime; i++) { GetCursorPos(out Point sourcePoint); System.Threading.Thread.Sleep(1000); GetCursorPos(out Point currentPoint); if (sourcePoint.X != currentPoint.X | sourcePoint.Y == currentPoint.Y) { i = 0; } if (CommonMethods.LoginOut) { break; } } LoginLocalOut(); }); } private void LoginLocalOut() { CommonMethods.AddOPLog(false, $"退出成功,退出用户:{CommonMethods.currentAdmin?.LoginName},权限:{CommonMethods.currentAdmin?.LoginLevel}"); LogHelper.Instance.WriteLog($"用户:" + CommonMethods.currentAdmin?.LoginName + "-退出"); CommonMethods.LoginOut = true; } #endregion /// /// 非刷卡模式 /// /// /// private void 非刷卡模式ToolStripMenuItem_Click(object sender, EventArgs e) { FrmLogin frmLogin = new FrmLogin(); if (frmLogin.ShowDialog() == DialogResult.OK) { CommonMethods.sysConfig.SwipeCardMode = false; IniConfigHelper.WriteIniData("配置信息", "开启刷卡模式", CommonMethods.sysConfig.SwipeCardMode.ToString()); lbl_LoginLevel.Text = CommonMethods.currentAdmin?.LoginLevel; lbl_LoginName.Text = CommonMethods.currentAdmin?.LoginName; lbl_LoginName.Visible = true; //登录日志 CommonMethods.AddOPLog(false, $"登录成功,登录用户:{CommonMethods.currentAdmin?.LoginName},权限:{CommonMethods.currentAdmin?.LoginLevel}"); } } private void label8_Click(object sender, EventArgs e) { } private void btn_Return_Click(object sender, EventArgs e) { DialogResult dialogResult1 = new FrmMsgBoxWithAck("是否退出登录!", "提示").ShowDialog(); if (dialogResult1 == DialogResult.OK) { this.lbl_LoginName.Text = ""; this.lbl_LoginLevel.Text = ""; CommonMethods.AddOPLog(false, $"退出登录成功,当前用户已注销"); CommonMethods.IsLoginOk = false; } } } #region 消息筛选器 internal class MessageFilter : IMessageFilter { //0x0200:鼠标移动 //0x0202:鼠标左键UP //0x201:鼠标左键Down //0x0203:鼠标左键双击 //0x0205:鼠标右键UP //0x0204:鼠标右键Down //0x020a:鼠标滚轮 //0x100:键盘按下 public bool PreFilterMessage(ref Message m) { //throw new NotImplementedException(); if (m.Msg == 0x0200 || m.Msg == 0x0202 || m.Msg == 0x201 || m.Msg == 0x0203 || m.Msg == 0x0205 || m.Msg == 0x204 || m.Msg == 0x20a || m.Msg == 0x100) { CommonMethods.tickCount = 0; CommonMethods.tickHomeCount = 0; } return false; } } #endregion }