Newer
Older
RbFreqStand / RbFreqStandMeasure / RbFreqStdMeas.cs
yxw on 18 May 2021 20 KB 合并计数器
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;
                }
            }
        }

        
    }
}