using DevExpress.XtraBars.Docking2010.Views; using DevExpress.XtraEditors; using IStation.DataProvider; using IStation.WinFrmUI.Basic; using IStation.WinFrmUI.CalcErQu; using IStation.WinFrmUI.Monitor; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Windows.Forms; namespace IStation.MainPanel.ChCalc { public partial class MainPanel : XtraUserControl { public MainPanel() { DataFolderHelper.IsExeExcute = false; InitializeComponent(); } //开启界面双缓冲 解决窗体切换闪屏问题 protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } } #region TabbedView //选中 private void tabbedView1_DocumentSelected(object sender, DocumentEventArgs e) { if (e.Document == null) return; if (!(e.Document.Tag is WinFrmUI.SurfaceGuid surfaceGuid)) return; foreach (var item in this.accordionControl.Elements) { if (SelectAccordionControlElement(item, surfaceGuid)) break; } } #endregion #region Page //是否存在Page private bool IsExistPage(WinFrmUI.SurfaceGuid sguid, bool isActivateDoc) { if (sguid == null) return false; if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0) { foreach (BaseDocument doc in this.tabbedView1.Documents) { if (doc.Tag != null) { if (doc.Tag is WinFrmUI.SurfaceGuid) { if ((doc.Tag as WinFrmUI.SurfaceGuid).ToString() == sguid.ToString()) { if (isActivateDoc) this.tabbedView1.Controller.Activate(doc); return true; } } } } } return false; } //更新数据 private void RefreshPageData(WinFrmUI.SurfaceGuid sguid) { if (sguid == null) return; if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0) { var doc = this.tabbedView1.Documents.ToList().Find(x => x.Tag != null && x.Tag is WinFrmUI.SurfaceGuid && (x.Tag as WinFrmUI.SurfaceGuid).ToString() == sguid.ToString()); if (doc != null) { if (doc.Control is WinFrmUI.DocumentPage page) { page.RefreshDataSource(); } return; } } } //更新PageTitle private void UpdatePageTitle(WinFrmUI.SurfaceGuid sguid, WinFrmUI.PageTitle title) { if (sguid == null || title == null) return; if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0) { var doc = this.tabbedView1.Documents.ToList().Find(x => x.Tag != null && x.Tag is WinFrmUI.SurfaceGuid && (x.Tag as WinFrmUI.SurfaceGuid).ToString() == sguid.ToString()); if (doc != null) { doc.Caption = title.Caption; doc.ImageOptions.Image = title.HeaderImage; doc.ImageOptions.SvgImage = title.HeaderSvgImage; doc.ImageOptions.SvgImageSize = title.SvgImageSize; if (doc.Control is WinFrmUI.DocumentPage page) { page.PageTitle = title; } return; } } } //创建Page private bool CreatePage(WinFrmUI.DocumentPage page, WinFrmUI.SurfaceGuid sguid) { if (page == null || sguid == null) return false; page.SurfaceGuid = sguid; page.Dock = DockStyle.Fill; page.IsExistPageEvent += IsExistPage; page.CreatePageEvent += CreatePage; page.RefreshPageDataEvent += RefreshPageData; page.UpdatePageTitleEvent += UpdatePageTitle; page.ClosePageEvent += ClosePage; page.ResetAllPagesEvent += ResetAllPages; page.RegistEvents(); this.tabbedView1.BeginUpdate(); var doc = this.tabbedView1.AddDocument(page); doc.Footer = Directory.GetCurrentDirectory(); if (page.PageTitle != null) { doc.Caption = page.PageTitle.Caption; doc.ImageOptions.Image = page.PageTitle.HeaderImage; doc.ImageOptions.SvgImage = page.PageTitle.HeaderSvgImage; doc.ImageOptions.SvgImageSize = page.PageTitle.SvgImageSize; } else { doc.Caption = page.SurfaceGuid?.Function; } doc.Tag = sguid; this.tabbedView1.EndUpdate(); this.tabbedView1.Controller.Activate(doc); page.InitialDataSource(); return true; } //关闭Page private void ClosePage(WinFrmUI.SurfaceGuid sguid) { if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0) { var doc = this.tabbedView1.Documents.ToList().Find(x => x.Tag != null && x.Tag is WinFrmUI.SurfaceGuid && (x.Tag as WinFrmUI.SurfaceGuid).ToString() == sguid.ToString()); if (doc != null) { var page = doc.Control as WinFrmUI.DocumentPage; this.tabbedView1.Controller.Close(doc);//会触发正在关闭和关闭事件 } } } //查找page private WinFrmUI.DocumentPage FindPage(WinFrmUI.SurfaceGuid sguid, bool isActiveDoc) { if (sguid == null) return default; var sguid_msg = sguid.ToString(); if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0) { var doc = this.tabbedView1.Documents.ToList().Find(x => x.Tag != null && x.Tag.ToString() == sguid_msg); if (doc != null) { if (isActiveDoc) this.tabbedView1.Controller.Activate(doc); if (doc.Control is WinFrmUI.DocumentPage page) { return page; } return null; } } return null; } //重置所有页面 private void ResetAllPages() { this.tabbedView1.Controller.CloseAll(); } #endregion #region AccordionControl //功能点击事件 private void accordionControl_ElementClick(object sender, DevExpress.XtraBars.Navigation.ElementClickEventArgs e) { if (e.Element.Tag == null) return; var ele = e.Element.Tag as FuncElement; if (ele.SurfaceGuid != null) { CreateFuncPage(ele); } } //获取模块元素 private DevExpress.XtraBars.Navigation.AccordionControlElement GetAccordionControlElement(FuncElement ele) { var accEle = new DevExpress.XtraBars.Navigation.AccordionControlElement(); if (ele.SurfaceGuid != null) { accEle.Name = ele.SurfaceGuid.ToString(); } else { accEle.Name = ele.ID; } accEle.Text = ele.Name; accEle.Image = ele.Image; accEle.Expanded = ele.Expand; accEle.AllowGlyphSkinning = DevExpress.Utils.DefaultBoolean.True; accEle.Tag = ele; accEle.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item; if (ele.FuncElements != null && ele.FuncElements.Count > 0) { foreach (var item in ele.FuncElements) { accEle.Elements.Add(GetAccordionControlElement(item)); } accEle.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group; } return accEle; } //选择功能元素 private bool SelectAccordionControlElement(DevExpress.XtraBars.Navigation.AccordionControlElement element, WinFrmUI.SurfaceGuid surfaceGuid) { if (element == null) return false; if (surfaceGuid == null) return false; if (element.Name == surfaceGuid.ToString()) { this.accordionControl.SelectedElement = element; if (element.OwnerElement != null) { element.OwnerElement.Expanded = true; this.accordionControl.Refresh(); } return true; } else { if (element.Elements != null && element.Elements.Count > 0) { foreach (var item in element.Elements) { SelectAccordionControlElement(item, surfaceGuid); } } } return false; } //创建功能页 private void CreateFuncPage(FuncElement obj) { try { var control = (Control)Assembly.LoadFrom(obj.DllFileName).CreateInstance(obj.ControlFullName); if (control is WinFrmUI.DocumentPage page) { if (IsExistPage(obj.SurfaceGuid, true)) return; CreatePage(page, obj.SurfaceGuid); } } catch (Exception) { XtraMessageBox.Show($"{obj.Name} 配置错误!"); } } #endregion private void accBasic_Click(object sender, EventArgs e) { var page = new BasicInfoMgrPage(); if (IsExistPage(page.SurfaceGuid, true)) return; CreatePage(page, page.SurfaceGuid); } private void accCurveCompare_Click(object sender, EventArgs e) { var page = new TestCurveByStationComparePage(); if (IsExistPage(page.SurfaceGuid, true)) return; CreatePage(page, page.SurfaceGuid); } private void accSetting_Click(object sender, EventArgs e) { AnaSettingMgrDlg frm = new AnaSettingMgrDlg(); frm.ShowDialog(); } private void accCalcu1_Click(object sender, EventArgs e) { var page = new IStation.WinFrmUI.CalcErQu.ManuWizardMainContainter(); if (IsExistPage(page.SurfaceGuid, true)) return; CreatePage(page, page.SurfaceGuid); } private void accCalcu2_Click(object sender, EventArgs e) { var page = new IStation.WinFrmUI.CalcErQu.CalcWizardMainContainter(); if (IsExistPage(page.SurfaceGuid, true)) return; CreatePage(page, page.SurfaceGuid); } private void accHistorical_Click(object sender, EventArgs e) { var page = new IStation.WinFrmUI.CalcErQu.CalcPrjHistoryContainter(); if (IsExistPage(page.SurfaceGuid, true)) return; CreatePage(page, page.SurfaceGuid); } private void accMonitor_Click(object sender, EventArgs e) { var page = new MonitorMgrPage(); if (IsExistPage(page.SurfaceGuid, true)) return; CreatePage(page, page.SurfaceGuid); } private void accWaterLevel_Click(object sender, EventArgs e) { var page = new IStation.WinFrmUI.River.RiverWaterLevelMainPage(); if (IsExistPage(page.SurfaceGuid, true)) return; CreatePage(page, page.SurfaceGuid); } private void accHistroy_Click(object sender, EventArgs e) { var page = new IStation.WinFrmUI.Monitor.HistoryDataDlg(); if (IsExistPage(page.SurfaceGuid, true)) return; CreatePage(page, page.SurfaceGuid); } private void MainPanel_Load(object sender, EventArgs e) { //数据初始化 if (!Settings.File.Initialize) { ElecPriceGenerator.Creater(); StationGenerator.Creater(); Settings.File.Initialize = true; SettingsHelper.Save(); } // IStation.BLL.RiverWaterLevelDrop.Initial(); IStation.BLL.ReservoirParas.Initial(); IStation.BLL.AnaSetting.Initial(); var page = new IStation.WinFrmUI.CalcErQu.CalcWizardMainContainter(); if (IsExistPage(page.SurfaceGuid, true)) return; CreatePage(page, page.SurfaceGuid); } } }