using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.ServiceModel; using System.Threading; using System.Configuration; namespace Aitex.Core.Backend { public partial class MainView : Form { private NotifyIcon _notifyIcon = new NotifyIcon(); Dictionary _views; object _msgLock = new object(); List _events = new List(); public MainView() { InitializeComponent(); _views = new Dictionary(); _views.Add("ABOUT_CONFIG",new About()); _views.Add("IO_CONFIG",new IoDataView()); _views.Add("PUMP_CONFIG", new PumpView()); _views.Add("DEVICE_CONFIG", new DeviceConfigBackendView()); _views.Add("SYSTEM_CONFIG", new SystemConfigView()); //_views.Add("INTERLOCK_CONFIG", new SwInterlock()); _views.Add("LICENSE_CONFIG", new LicenseView()); foreach(var item in _views) splitContainer2.Panel2.Controls.Add(item.Value); ////defaut view ShowView("ABOUT_CONFIG"); _timer.Interval = 250; _timer.AutoReset = true; _timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed); Load += new EventHandler(MainView_Load); VisibleChanged += new EventHandler(MainView_VisibleChanged); this.SizeChanged += new EventHandler(MainView_SizeChanged); } void MainView_SizeChanged(object sender, EventArgs e) { foreach (var item in _views) { item.Value.Width = this.splitContainer1.Panel2.Width; item.Value.Height = this.splitContainer1.Panel2.Height; } } void MainView_VisibleChanged(object sender, EventArgs e) { if (!Visible) { _timer.Stop(); } else { _timer.Start(); } } System.Timers.Timer _timer = new System.Timers.Timer(); void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { Action act = () => { if (_events.Count > 0) { List list1 = null; lock (_msgLock) { list1 = _events.ToList(); _events.Clear(); } //while (listBox_Event.Items.Count > 10) // listBox_Event.Items.RemoveAt(0); //if (list1 != null) //{ // listBox_Event.Items.AddRange(list1.ToArray()); // listBox_Event.SelectedIndex = listBox_Event.Items.Count - 1; //} } }; BeginInvoke(act); } /// /// 当用户登录后台时在窗体左上角标题栏显示当前反应腔的设备编号 /// /// /// void MainView_Load(object sender, EventArgs e) { //this.Text = string.Format("{0}【{1}】后台界面登入", Reactor.PmName, Reactor.Config.VariationName); } /// /// 不允许用户直接关闭后台界面窗口程序,退出PM程序必须通过点击任务栏图标实现程序退出 /// /// protected override void OnFormClosing(FormClosingEventArgs e) { if (e.CloseReason == CloseReason.UserClosing) { e.Cancel = true; Hide(); return; } } public void StopUpdate() { (_views["IO_CONFIG"] as IoDataView).Close(); _timer.Stop(); } public void AddCustomView(string name, UserControl uc) { if (uc == null) return; this.treeView1.Nodes.Add(new TreeNode() { Tag = name, Text = name }); uc.Hide(); _views.Add(name, uc); splitContainer2.Panel2.Controls.Add(uc); uc.Width = splitContainer2.Panel2.Width; uc.Height = splitContainer2.Panel2.Height; } /// /// disable close box on the title bar /// protected override CreateParams CreateParams { get { int CS_NOCLOSE = 0x200; CreateParams parameters = base.CreateParams; parameters.ClassStyle |= CS_NOCLOSE; return parameters; } } /// /// 显示对应的视图界面 /// /// private void ShowView(string viewName) { foreach (var item in _views) { if (item.Key != viewName) item.Value.Hide(); else item.Value.Show(); } } /// /// PM腔页面切换事件处理 /// /// /// private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { var viewName = (string)e.Node.Tag; ShowView(viewName); } /// /// 退出PM后台服务界面 /// /// /// private void btnLogout_Click(object sender, EventArgs e) { Hide(); } /// /// 单独复位当前反应腔 /// /// /// private void SysReset_Click(object sender, EventArgs e) { //Reactor.PostEvent(new Command.ResetCommand()); } } }