using Casic.Birmm.RbFreqStandMeasure.counter; using Casic.Birmm.RbFreqStandMeasure.info; using Casic.Birmm.RbFreqStandMeasure.Properties; using Casic.Birmm.RbFreqStandMeasure.R_DataBase; using Casic.Birmm.RbFreqStandMeasure.R_DataBase.Dto; using Casic.Birmm.RbFreqStandMeasure.R_DataBase.Service; using Casic.Birmm.RbFreqStandMeasure.R_DataBase.Service.Impl; using Casic.Birmm.RbFreqStandMeasure.setting; using Casic.Birmm.RbFreqStandMeasure.tools; using Casic.Birmm.RbFreqStandMeasure.Tools; using System; using System.Collections.Generic; using System.Drawing; using System.IO.Ports; using System.Reflection; using System.Runtime.InteropServices; using System.Windows.Forms; namespace Casic.Birmm.RbFreqStandMeasure { public partial class RbFreqStdMeas : Form { private bool closeClicked = false; private bool closed = false; #region 无边框拖动效果/最小化窗口/关闭窗口 [DllImport("user32.dll")]//拖动无窗体的控件 public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); public const int WM_SYSCOMMAND = 0x0112; public const int SC_MOVE = 0xF010; public const int HTCAPTION = 0x0002; public static RbFreqStdMeas rbFreqStdMeas; public static List<SerialPort> portList = new List<SerialPort>(); private void RbFreqStdMeas_MouseDown(object sender, MouseEventArgs e) { //拖动窗体 ReleaseCapture(); SendMessage(Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0); } #endregion private void btnExitSys_Click(object sender, EventArgs e) { closeClicked = true; DeviceService deviceService = new DeviceServiceImpl(); List<DeviceView> list = deviceService.getDeviceByChannel(); if (list != null && list.Count > 0) { MessageBox.Show("有正在检测的仪器,请先停止检测再退出软件!"); closeClicked = false; return; } if (MessageBox.Show("确认退出软件?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { foreach (SerialPort port in portList) { port.Dispose(); } FreshStatus.portClock.Dispose(); FreshStatus.portSatellite.Dispose(); Application.Exit(); } else { closeClicked = false; } } private void btnMinSys_Click(object sender, EventArgs e) { WindowState = FormWindowState.Minimized; } private void btnExitSys_MouseHover(object sender, EventArgs e) { ToolTip p = new ToolTip(); p.ShowAlways = true; p.SetToolTip(btnExitSys, "退出"); } private void btnMinSys_MouseHover(object sender, EventArgs e) { ToolTip p = new ToolTip(); p.ShowAlways = true; p.SetToolTip(btnMinSys, "最小化"); } private bool[] menuSelected = { true, false, false, false, false, false }; // 按钮图标 private PictureBox[] menuPics; // 按钮图标的资源名称(选中的资源名称在后面加上 _selected) private string[] menuIconResources; // 按钮文本 private Label[] menuLabels; // 按钮下划线 private Label[] menuUnderlines; #region 样式配置 private readonly Color textColor = Color.FromArgb(51, 51, 51); // #333333 private readonly Color menuHoverBackColor = Color.FromArgb(86, 163, 242); // #56a3f2 private readonly Color menuSelectedColor = Color.FromArgb(63, 132, 215); // #3f84d7 #endregion private void ClearAllMenuSelected() { // 找到当前选中的按钮 int index = 0; for (int i = 0; i < menuSelected.Length; i++) { if (menuSelected[i] == true) { index = i; break; } } // 将当前按钮的效果设置为默认未选中 menuPics[index].BackgroundImage = (Bitmap)Resources.ResourceManager.GetObject(menuIconResources[index], null); menuLabels[index].ForeColor = textColor; menuUnderlines[index].BackColor = Color.Transparent; } #region 首页按钮点击、鼠标移入/移出效果 private void HoverHome() { panHome.Back = menuHoverBackColor; } private void LeaveHome() { panHome.Back = Color.Transparent; } private void SelectHome() { // 移除所有按钮的选中样式 ClearAllMenuSelected(); // 鼠标移入效果去掉 LeaveHome(); // 重新设置所有按钮的状态 menuSelected = new bool[] { true, false, false, false, false, false }; // 将新选中的按钮设置为选中 picIconHome.BackgroundImage = (Bitmap)Resources.ResourceManager.GetObject("icon_home_selected", null); labHomeText.ForeColor = menuSelectedColor; labHomeSelected.BackColor = menuSelectedColor; // 切换至首页 switchMainPanel(0); } #endregion #region 基准状态按钮点击、移入/移出效果 private void HoverStatus() { panStatus.Back = menuHoverBackColor; } private void LeaveStatus() { panStatus.Back = Color.Transparent; } private void SelectStatus() { // 移除所有按钮的选中样式 ClearAllMenuSelected(); // 鼠标移入效果去掉 LeaveStatus(); // 重新设置所有按钮的状态 menuSelected = new bool[] { false, true, false, false, false, false }; // 将新选中的按钮设置为选中 picIconStatus.BackgroundImage = (Bitmap) Resources.ResourceManager.GetObject("icon_status_selected", null); labStatusText.ForeColor = menuSelectedColor; labStatusSelected.BackColor = menuSelectedColor; // 切换到基准状态页面 switchMainPanel(1); } #endregion #region 送检仪器按钮点击、移入/移出效果 private void HoverDev() { panDev.Back = menuHoverBackColor; } private void LeaveDev() { panDev.Back = Color.Transparent; } private void SelectDev() { // 移除所有按钮的选中样式 ClearAllMenuSelected(); // 鼠标移入效果去掉 LeaveDev(); // 重新设置所有按钮的状态 menuSelected = new bool[] { false, false, true, false, false ,false }; // 将新选中的按钮设置为选中 picIconDev.BackgroundImage = (Bitmap)Resources.ResourceManager.GetObject("icon_dev_selected", null); labDevText.ForeColor = menuSelectedColor; labDevSelected.BackColor = menuSelectedColor; // 切换至待检仪器管理 switchMainPanel(2); } #endregion #region 频率计数器测量点击、移入/移出效果 private void HoverCounter() { panCounter.Back = menuHoverBackColor; } private void LeaveCounter() { panCounter.Back = Color.Transparent; } private void SelectCounter() { // 移除所有按钮的选中样式 ClearAllMenuSelected(); // 鼠标移入效果去掉 LeaveCounter(); // 重新设置所有按钮的状态 menuSelected = new bool[] { false, false, false, true, false, false }; // 将新选中的按钮设置为选中 picIconCounter.BackgroundImage = (Bitmap)Resources.ResourceManager.GetObject("icon_counter_selected", null); labCounterText.ForeColor = menuSelectedColor; labCounterSelected.BackColor = menuSelectedColor; // 切换到频率计数器的界面 switchMainPanel(3); } #endregion #region 数据管理点击、移入/移出效果 private void HoverData() { panData.Back = menuHoverBackColor; } private void LeaveData() { panData.Back = Color.Transparent; } private void SelectData() { //if (CounterCtrlForm.isDetecting) //{ // MessageBox.Show("正在检测计数器,无法离开当前界面!"); // return; //} // 移除所有按钮的选中样式 ClearAllMenuSelected(); // 鼠标移入效果去掉 LeaveData(); // 重新设置所有按钮的状态 menuSelected = new bool[] { false, false, false, false, true, false }; // 将新选中的按钮设置为选中 picIconData.BackgroundImage = (Bitmap)Resources.ResourceManager.GetObject("icon_data_selected", null); labDataText.ForeColor = menuSelectedColor; labDataSelected.BackColor = menuSelectedColor; // 弹出对话框进行数据备份与还原操作 DataBackupDlg dataDlg = new DataBackupDlg(); dataDlg.HideMaskAction += () => { this.HideMask(); }; this.ShowMask(); dataDlg.StartPosition = FormStartPosition.CenterParent; // 指定窗口弹出在父窗口的中间位置 dataDlg.ShowDialog(); } private MaskForm maskForm; private void ShowMask() { maskForm = new MaskForm(this.Location, this.Size); maskForm.Show(); } private void HideMask() { if (maskForm != null) { maskForm.Close(); this.BringToFront(); } } #endregion #region 系统管理点击、移入/移出效果 private void HoverSetting() { panSetting.Back = menuHoverBackColor; } private void LeaveSetting() { panSetting.Back = Color.Transparent; } private void SelectSetting() { // 移除所有按钮的选中样式 ClearAllMenuSelected(); // 鼠标移入效果去掉 LeaveSetting(); // 重新设置所有按钮的状态 menuSelected = new bool[] { false, false, false, false, false, true }; // 将新选中的按钮设置为选中 picIconSetting.BackgroundImage = (Bitmap)Resources.ResourceManager.GetObject("icon_setting_selected", null); labSettingText.ForeColor = menuSelectedColor; labSettingSelected.BackColor = menuSelectedColor; // 切换到设置的界面 switchMainPanel(5); } #endregion public RbFreqStdMeas() { InitializeComponent(); rbFreqStdMeas = this; // 打开数据库 int ret = DbConnectService.openDb(); if (ret == 0) { LogHelper.WriteInfoLog(MethodBase.GetCurrentMethod().DeclaringType, "打开数据库成功"); portList.Add(new SerialPort()); portList.Add(new SerialPort()); portList.Add(new SerialPort()); portList.Add(new SerialPort()); portList.Add(new SerialPort()); DeviceService deviceService = new DeviceServiceImpl(); DetectionItemService detectionItemService = new DetectionItemServiceImpl(); List<DeviceView> listChannelStatus = deviceService.getDeviceByChannel(); if (listChannelStatus != null && listChannelStatus.Count > 0) { foreach (DeviceView device in listChannelStatus) { long deviceId = device.Id; string startTime = device.StartTime; string endTime = device.EndTime; detectionItemService.stopDetection(deviceId, device.DetectionItemId, startTime, endTime, true); } } } else { MessageBox.Show("启动失败,无法连接数据库!", null, MessageBoxButtons.OK, MessageBoxIcon.Error); LogHelper.WriteErrorLog(MethodBase.GetCurrentMethod().DeclaringType, "打开数据库失败"); Environment.Exit(0); } } private void RbFreqStdMeas_Load(object sender, EventArgs e) { menuPics = new PictureBox[] { picIconHome, picIconStatus, picIconDev, picIconCounter, picIconData, picIconSetting }; menuLabels = new Label[] { labHomeText, labStatusText, labDevText, labCounterText, labDataText, labSettingText }; menuUnderlines = new Label[] { labHomeSelected, labStatusSelected, labDevSelected, labCounterSelected, labDataSelected, labSettingSelected }; menuIconResources = new string[] { "icon_home", "icon_status", "icon_dev", "icon_counter", "icon_data", "icon_setting" }; // 加载首页的内容 switchMainPanel(0); } private void panHome_Click(object sender, EventArgs e) { if (menuSelected[0] == false) { SelectHome(); } } private void panHome_MouseHover(object sender, EventArgs e) { // 没有选中首页时才动作 if (menuSelected[0] == false) { HoverHome(); } } private void panHome_MouseLeave(object sender, EventArgs e) { // 没有选中首页时才动作 if (menuSelected[0] == false) { LeaveHome(); } } private void panStatus_Click(object sender, EventArgs e) { if (menuSelected[1] == false) { SelectStatus(); } } private void panStatus_MouseHover(object sender, EventArgs e) { if (menuSelected[1] == false) { HoverStatus(); } } private void panStatus_MouseLeave(object sender, EventArgs e) { if (menuSelected[1] == false) { LeaveStatus(); } } private void panDev_Click(object sender, EventArgs e) { if (menuSelected[2] == false) { SelectDev(); } } private void panDev_MouseHover(object sender, EventArgs e) { if (menuSelected[2] == false) { HoverDev(); } } private void panDev_MouseLeave(object sender, EventArgs e) { if (menuSelected[2] == false) { LeaveDev(); } } private void panCounter_Click(object sender, EventArgs e) { if (menuSelected[3] == false) { SelectCounter(); } } private void panCounter_MouseHover(object sender, EventArgs e) { if (menuSelected[3] == false) { HoverCounter(); } } private void panCounter_MouseLeave(object sender, EventArgs e) { if (menuSelected[3] == false) { LeaveCounter(); } } private void panData_Click(object sender, EventArgs e) { if (menuSelected[4] == false) { SelectData(); } } private void panData_MouseHover(object sender, EventArgs e) { if (menuSelected[4] == false) { HoverData(); } } private void panData_MouseLeave(object sender, EventArgs e) { if (menuSelected[4] == false) { LeaveData(); } } private void panSetting_Click(object sender, EventArgs e) { if (menuSelected[5] == false) { SelectSetting(); } } private void panSetting_MouseHover(object sender, EventArgs e) { if (menuSelected[5] == false) { HoverSetting(); } } private void panSetting_MouseLeave(object sender, EventArgs e) { if (menuSelected[5] == false) { LeaveSetting(); } } private void switchMainPanel(int index) { //if (index != 3 && CounterCtrlForm.isDetecting) //{ // MessageBox.Show("正在检测计数器,无法离开当前界面!"); // // 移除所有按钮的选中样式 // ClearAllMenuSelected(); // // 鼠标移入效果去掉 // LeaveCounter(); // // 重新设置所有按钮的状态 // menuSelected = new bool[] { false, false, false, true, false, false }; // // 将新选中的按钮设置为选中 // picIconCounter.BackgroundImage = (Bitmap)Resources.ResourceManager.GetObject("icon_counter_selected", null); // labCounterText.ForeColor = menuSelectedColor; // labCounterSelected.BackColor = menuSelectedColor; // return; //} panelMain.Controls.Clear(); switch (index) { case 0: // 首页 HomeCtrlForm home = new HomeCtrlForm(); home.Show(); panelMain.Controls.Add(home); break; case 1: // 基准状态 StatusCtrlForm statusForm = new StatusCtrlForm(); statusForm.Show(); panelMain.Controls.Add(statusForm); break; case 2: // 待检设备 InfoCtrlForm infoForm = new InfoCtrlForm(); infoForm.Show(); panelMain.Controls.Add(infoForm); break; case 3: // 频率计数器范围 CounterCtrlForm counterForm = CounterCtrlForm.GetInstance(); counterForm.Show(); panelMain.Controls.Add(counterForm); break; case 4: // 计量信息 DevTestedCtrlForm tested = new DevTestedCtrlForm(); tested.Show(); panelMain.Controls.Add(tested); break; case 5: // 设置 SettingCtrlForm settingForm = new SettingCtrlForm(); settingForm.Show(); panelMain.Controls.Add(settingForm); break; default: break; } } private void RbFreqStdMeas_FormClosing(object sender, FormClosingEventArgs e) { if (!closeClicked && !closed) { closed = true; DeviceService deviceService = new DeviceServiceImpl(); List<DeviceView> list = deviceService.getDeviceByChannel(); if (list != null && list.Count > 0) { MessageBox.Show("有正在检测的仪器,请先停止检测再退出软件!"); closed = false; e.Cancel = true; return; } if (MessageBox.Show("确认退出软件?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { foreach (SerialPort port in portList) { port.Dispose(); } FreshStatus.portClock.Dispose(); FreshStatus.portSatellite.Dispose(); Application.Exit(); } else { closed = false; e.Cancel = true; } } } } }