#region using System; using System.Collections; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Diagnostics; using System.Drawing; using System.Windows.Forms; using CSFrameworkV5.Business; using CSFrameworkV5.Common; using CSFrameworkV5.Core; using CSFrameworkV5.Core.SystemSecurity; using CSFrameworkV5.Interfaces; using CSFrameworkV5.Language; using CSFrameworkV5.Library.CommonClass; using CSFrameworkV5.Library.CommonForms; using DevExpress.XtraBars; using DevExpress.XtraBars.Docking; using DevExpress.XtraBars.Helpers; using DevExpress.XtraBars.Ribbon; using DevExpress.XtraNavBar; using DevExpress.XtraTab; using DevExpress.XtraTabbedMdi; using Microsoft.Win32; #endregion ///*************************************************************************/ ///* ///* 文件名 :frmMain.cs ///* 程序说明 : 系统主窗体(MDI主窗体) ///* 原创作者 :www.csframework.com ///* ///* Copyright 2006-2021 wwww.csframework.com, 保留所有权利. ///* ///**************************************************************************/ namespace CSFrameworkV5.Library.Entry { /// /// 系统主窗体(MDI主窗体) /// public partial class frmMain1 : frmBase, IMdiForm { /// /// 关闭窗体状态,用户在登录窗体强制退出系统IsClosing=True /// public static bool IsClosing = false; //消息提示的预设字体颜色 private Color _DefaultFontColor; //注册不同类型的ToolBar,预设使用DevBarRegister注册器 private IToolbarRegister _MdiToolbar; //消息管理业务层 private bllMessageCenter _MessageCenter; //模块容器窗体 private frmModuleContainer _ModuleContainer; //模块管理器实例 private ModuleManager _ModuleManager; //系统主菜单(各模块主菜单的集合) private MenuStrip _ModuleMenus = new MenuStrip(); //Doc组件尺寸改变时的标记 private bool _OnSizeChangingDock; //NavBarControl尺寸改变时的标记 private bool _OnSizeChangingNavBar; public frmMain1() { InitializeComponent(); _MessageCenter = new bllMessageCenter(); } /// /// 获取ToolBar的按钮 /// /// /// public object GetToolBarButton(string buttonName) { foreach (BarItem item in ribbon.Items) if (item.Name == buttonName) return item; return null; } /// /// 系统主菜单(各模块主菜单的集合) /// public MenuStrip MainMenu => _ModuleMenus; /// /// 删除菜单功能(包括主菜单、导航菜单、Bar菜单) /// /// 菜单名称 /// public bool RemoveFunction(string menuName) { //删除菜单-ToolStripItem var items = _ModuleMenus.Items.Find(menuName, true); foreach (var item in items) { (item.Owner as ToolStripDropDownMenu).Items.Remove(item); _ModuleMenus.Items.Remove(item); } var found = false; //删除Bar的按钮 foreach (BarSubItemLink link in barMainMenu.ItemLinks) if (link.Item.Tag is ToolStripItem && (link.Item.Tag as ToolStripItem).Name == "menuUserCustomMain") { foreach (BarItemLink L in (link.Item as BarSubItem) .ItemLinks) if ((L.Item.Tag as ToolStripItem).Name == menuName) { (link.Item as BarSubItem).ItemLinks .Remove(L); //删除链接 barMainMenu.Manager.Items.Remove(L.Item); //删除实体对象 found = true; break; } if (found) break; } //删除导航菜单 _ModuleManager.CurrentNavigator.RemoveFunction(menuName); return items != null && items.Length > 0; } /// /// 检查数据窗体是否没有保存数据 /// private bool AnyDataChanged() { foreach (Form form in Application.OpenForms) if (form is IDataOperatable) //子窗体处于新增或修改模式. if (((IDataOperatable)form).DataChanged) return true; return false; } private void btnAbout_ItemClick(object sender, ItemClickEventArgs e) { new frmAbout().ShowDialog(); } private void btnBridgeADO_ItemClick(object sender, ItemClickEventArgs e) { if (btnBridgeADO.Checked) SetBridgeType(BridgeType.ADODirect, btnBridgeADO); else btnBridgeADO.Checked = !btnBridgeADO.Checked; } private void btnBridgeWinSvc_ItemClick(object sender, ItemClickEventArgs e) { if (btnBridgeWinSvc.Checked) SetBridgeType(BridgeType.WindowsService, btnBridgeWinSvc); else btnBridgeWinSvc.Checked = !btnBridgeWinSvc.Checked; } private void btnCompany_ItemClick(object sender, ItemClickEventArgs e) { //测试打开某个模块的窗体 OpenModuleForm("CSFrameworkV5.SystemModule.frmCompanyInfo", "menuCompanyInfo", "打开模块的窗体同时传入参数!"); } private void btnExit_ItemClick(object sender, ItemClickEventArgs e) { Close(); } private void btnHideTabPageHeader_ItemClick(object sender, ItemClickEventArgs e) { ribbon.ShowPageHeadersMode = ShowPageHeadersMode.Hide; ribbon.Invalidate(true); UserConfig.Current.ShowRibbonPageHeader = false; UserConfig.Current.Save(); } private void btnLockUI_ItemClick(object sender, ItemClickEventArgs e) { frmLock.ExecuteLock(this); } private void btnLogout_ItemClick(object sender, ItemClickEventArgs e) { if (!Msg.AskQuestion(LanLib.Get("确定要登出吗?"))) return; if (!Application.AllowQuit) return; //程序不允许退出 try { if (AnyDataChanged()) { Msg.Warning(LanLib.Get("系统检测到有数据窗体没有保存,不能登出!")); return; } SystemAuthentication.Current.Logout(); //注销用户 DataCacheMgr.Instance.ClearCache(); //清理缓存数据 Hide(); //隐藏本窗体 Form old = this; //显示登录窗体 MdiTools.MainForm = null; if (frmLogin.Login() && MdiTools.MainForm != null) { //重新登录成功,则释放旧窗体的实例 old.Dispose(); old = null; MdiTools.MainForm.Show(); } GC.Collect(); } catch (Exception ex) { LogUserOperate.Write(ex); Msg.ShowException(ex); } } private void btnRefreshCache_ItemClick(object sender, ItemClickEventArgs e) { DataCacheMgr.Instance.ClearCache(); //托管 Msg.ShowInformation(LanLib.Get("更新缓存数据成功! 请重新打开窗体启动显示效果.")); } private void btnSetNormal_ItemClick(object sender, ItemClickEventArgs e) { ribbon.SelectedPage = ribbon_PageToolBar; } private void btnSetOther_ItemClick(object sender, ItemClickEventArgs e) { ribbon.SelectedPage = ribbon_PageOther; } private void btnShowMainMenu_ItemClick(object sender, ItemClickEventArgs e) { if (barMainMenu.Visible) { barMainMenu.Visible = false; btnShowMainMenu.Caption = LanLib.Get("显示主菜单"); } else { barMainMenu.Visible = true; btnShowMainMenu.Caption = LanLib.Get("隐藏主菜单"); } } private void btnShowTabPageHeader_ItemClick(object sender, ItemClickEventArgs e) { ribbon.ShowPageHeadersMode = ShowPageHeadersMode.Show; ribbon.Invalidate(true); UserConfig.Current.ShowRibbonPageHeader = true; UserConfig.Current.Save(); } private void btnUserCustomParam_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { MdiTools.OpenChildForm(this, typeof(frmSystemSettingsByUser), true); } //frmMain.dockPanel1_SizeChanged private void dockPanel1_SizeChanged(object sender, EventArgs e) { if (_OnSizeChangingDock) return; try { SuspendLayout(); _OnSizeChangingDock = true; navBarControl1.Dock = DockStyle.None; navBarControl1.Left = xtraScrollableControl1.DisplayRectangle.X; //滚动容器的实际坐标 navBarControl1.Top = xtraScrollableControl1.DisplayRectangle.Y; //滚动容器的实际坐标 navBarControl1.NavigationPaneGroupClientHeight = 100; //导航按钮展开显示明细菜单区域的高度。 navBarControl1.Height = navBarControl1.Groups.Count * 70 + navBarControl1 .NavigationPaneGroupClientHeight; //手工指定NavBar组件的高度 navBarControl1.OptionsNavPane.ShowOverflowButton = false; //不显示底部的动态扩展按钮 navBarControl1.OptionsNavPane.ShowOverflowPanel = false; //不显示底部的动态扩展按钮区域 xtraScrollableControl1.HorizontalScroll.Visible = false; //不显示横向滚动条 //若NavBar显示垂直滚动条,要预留明细区域的滚动条,约25个像素 if (xtraScrollableControl1.VerticalScroll.Visible) navBarControl1.Width = dockPanel1.Width - 25; //右侧预留边距 else navBarControl1.Width = dockPanel1.Width - 5; //右侧预留边距 //NavBar全屏自适应高度 if (dockPanel1.ClientSize.Height - 60 > navBarControl1.Height) navBarControl1.Height = dockPanel1.ClientSize.Height - 60; } finally { _OnSizeChangingDock = false; ResumeLayout(); } } public void DoHelp(IButtonInfo sender) { HelpDoc.HelpAllFile(HelpDoc.CSHelp); } private void frmMain_FormClosed(object sender, FormClosedEventArgs e) { Application.Exit(); //关闭主窗体,系统终止! } private void frmMain_FormClosing(object sender, FormClosingEventArgs e) { var ok = false; if (IsClosing) //用户在登录窗体强制退出系统 ok = true; else ok = Msg.AskQuestion(LanLib.Get("确定要关闭程序吗?")); if (ok) { timerTick.Stop(); timerMessage.Stop(); Application.ExitThread(); Application.Exit(); } else { e.Cancel = true; } } private void frmMain_Load(object sender, EventArgs e) { SetBridgeType(BridgeFactory.BridgeType, null); timerMessage_Tick(timerMessage, new EventArgs()); //打开主窗体即时取一次用户的消息 timerMessage.Interval = Globals.DEF_MSG_INTERVAL; timerMessage.Start(); //从后台定时取消息 ReadSystemMessage(); //取系统广播消息 //加载模块快捷按钮 _ModuleManager.LoadCustomFunction(); //例子: 加载主窗体后显示指定模块主窗体 //navBarControl1.ActiveGroup = _ModuleManager.FindNavBarGroup(ModuleNames.SalesModule); //this.ActiveModule(ModuleNames.SalesModule, "menuMainSalesSystem"); //预设显示快捷功能模块 navBarControl1.ActiveGroup = _ModuleManager.FindNavBarGroup(ModuleNames.UserCustom); _ModuleManager.ActiveModule(ModuleNames.UserCustom, "menuUserCustomMain"); //读取用户配置 var style = (NavBarViewKind)Enum.Parse(typeof(NavBarViewKind), UserConfig.Current.NavBarStyle); navBarControl1.PaintStyleKind = style; // navBarControl1.OptionsNavPane.ShowExpandButton = false; } private void frmMain_SizeChanged(object sender, EventArgs e) { pnlQuickSearch.Visible = Width > 1024; } /// /// 初始化MDI主窗体,在登录窗体显示加载状态。 /// /// 登录窗体上的进度显示组件 public void InitUserInterface(IMsg splash) { try { SuspendLayout(); splash.UpdateMessage(LanLib.Get("正在初始化主窗体...")); SetMainFormEnviroment(); splash.UpdateMessage(LanLib.Get("正在初始化用户界面MdiToolbar...")); MdiToolbar = new DevRibbonRegister(this, ribbon, ribbon_PageToolBar, null); RegisterMdiButtons(); LogUserOperate.Write("初始化MdiToolbar OK."); splash.UpdateMessage( LanLib.Get("正在初始化模块容器ModuleContainerForm...")); _ModuleContainer = (frmModuleContainer)MdiTools.OpenChildForm(this, typeof(frmModuleContainer), null); _ModuleContainer.InitButtons(); LogUserOperate.Write("初始化ModuleContainerForm OK."); splash.UpdateMessage(LanLib.Get("正在加载模块...")); _ModuleManager = new ModuleManager(this, _ModuleContainer.xtraTabControl1); //创建模块管理器 _ModuleManager.LoadModules(splash, _ModuleMenus, Globals.DEF_SYS_MODULE); //加载可用模块 LogUserOperate.Write("正在加载模块 OK."); splash.UpdateMessage(LanLib.Get("正在初始化用户权限...")); SystemAuthentication.SetMenuAuthority(_ModuleMenus); _ModuleManager.SetModuleSecurity(_ModuleMenus); LogUserOperate.Write("初始化用户权限 OK."); splash.UpdateMessage(LanLib.Get("正在加载工具栏(Toolbar)...")); _ModuleManager.CreateToolButtons(barMainMenu, _ModuleMenus); LogUserOperate.Write("加载工具栏Toolbar OK."); splash.UpdateMessage( LanLib.Get("正在加载导航面板(Navigator Panel)...")); _ModuleManager.CreateNavBarButtons(navBarControl1, _ModuleMenus, NavigatorStyle.BarContainer); //创建导航工具栏按钮 LogUserOperate.Write("Navigator Panel OK."); //new 20200202 splash.UpdateMessage(LanLib.Get("正在加载导航面板Ribbon Style...")); _ModuleManager.CreateRibbonButtons(ribbon, ilModuleIcon32, _ModuleMenus); //创建导航工具栏按钮 LogUserOperate.Write("Ribbon OK."); splash.UpdateMessage(LanLib.Get("设置主窗体语言...")); SetLanguage(); splash.UpdateMessage(LanLib.Get("加载完毕.")); LogUserOperate.Write(LanLib.Get("设置主窗体语言 OK.")); LogUserOperate.WriteOpenFormLog(this, LanLib.Get("成功运行主窗体"), ""); ResumeLayout(); } catch (Exception ex) { LogUserOperate.Write(ex); Msg.ShowException(ex); } } private void menuNavStyleGroup_Click(object sender, EventArgs e) { navBarControl1.PaintStyleKind = NavBarViewKind.Default; UserConfig.Current.NavBarStyle = navBarControl1.PaintStyleKind.ToStringEx(); UserConfig.Current.Save(); } private void menuNavStyleList_Click(object sender, EventArgs e) { navBarControl1.PaintStyleKind = NavBarViewKind.NavigationPane; UserConfig.Current.NavBarStyle = navBarControl1.PaintStyleKind.ToStringEx(); UserConfig.Current.Save(); var activeName = _ModuleManager.ActiveModuleName; var menuName = _ModuleManager.ActiveModuleMainMenu; _ModuleManager.CreateNavBarButtons(navBarControl1, _ModuleMenus, NavigatorStyle.BarItem); //创建导航工具栏按钮 _ModuleManager.ActiveModule(activeName, menuName); } private void menuNavStylePanelList_Click(object sender, EventArgs e) { navBarControl1.PaintStyleKind = NavBarViewKind.NavigationPane; UserConfig.Current.NavBarStyle = navBarControl1.PaintStyleKind.ToStringEx(); UserConfig.Current.Save(); } private void menuNavStyleTree_Click(object sender, EventArgs e) { navBarControl1.PaintStyleKind = NavBarViewKind.NavigationPane; UserConfig.Current.NavBarStyle = navBarControl1.PaintStyleKind.ToStringEx(); UserConfig.Current.Save(); var activeName = _ModuleManager.ActiveModuleName; var menuName = _ModuleManager.ActiveModuleMainMenu; _ModuleManager.CreateNavBarButtons(navBarControl1, _ModuleMenus, NavigatorStyle.BarContainer); //创建导航工具栏按钮 _ModuleManager.ActiveModule(activeName, menuName); } private void navBarControl1_SizeChanged(object sender, EventArgs e) { if (_OnSizeChangingNavBar) return; if (_OnSizeChangingDock) return; try { _OnSizeChangingNavBar = true; if (dockPanel1.Visibility == DockVisibility.Visible && navBarControl1.Visible && navBarControl1.Width > 0) dockPanel1.Width = navBarControl1.Width; } finally { _OnSizeChangingNavBar = false; } } /// /// 使用默认IE浏览器打开指定的URL网页 /// /// private void OpenUrl_ByDefaultIE() { try { var key = Registry.ClassesRoot.OpenSubKey( @"http\shell\open\command\"); var cmdLine = ConvertEx.ToString(key.GetValue("")); //兼容不同的浏览器后面的参数不一样,读取浏览器exe文件 var cmd = cmdLine.Split(new[] { "\"" }, StringSplitOptions.RemoveEmptyEntries); var IE_exe = CodeSafeHelper.GetSafeCmd(cmd[0]); var url = CodeSafeHelper.GetSafeCmd("http://www.csframework.com"); Process.Start(IE_exe, url); } catch { } } private void picLogo_MouseMove(object sender, MouseEventArgs e) { } private void picLogo_MouseUp(object sender, MouseEventArgs e) { OpenUrl_ByDefaultIE(); } /// /// 取系统广播消息 /// private void ReadSystemMessage() { var msg = new bllMessageCenter().GetBroadcastMessage(); lbSystemMSG.Caption = string.IsNullOrEmpty(msg) ? LanLib.Get("暂无消息.") : msg; } /// /// 移除现有的BarItem /// private void RemoveCreatedItem() { try { barMainMenu.BeginUpdate(); var list = new List(); foreach (BarItemLink link in barMainMenu.ItemLinks) if (link.Item.Tag != null) list.Add(link); foreach (var link in list) { barManager1.Items.Remove(link.Item); barMainMenu.ItemLinks.Remove(link); } } finally { barMainMenu.EndUpdate(); } } private void ribbon_btnAbout_ItemClick(object sender, ItemClickEventArgs e) { new frmAbout().ShowDialog(); } private void ribbon_btnCHS_ItemClick(object sender, ItemClickEventArgs e) { //设置简体语言 DoSetLanguage(e.Item, LanguageType.CHS); } private void ribbon_btnCHT_ItemClick(object sender, ItemClickEventArgs e) { //设置繁体 DoSetLanguage(e.Item, LanguageType.CHT); } private void ribbon_btnENG_ItemClick(object sender, ItemClickEventArgs e) { //设置英文 DoSetLanguage(e.Item, LanguageType.ENG); } private void ribbon_btnHelp_ItemClick(object sender, ItemClickEventArgs e) { if (ActiveMdiChild is IMdiChildForm) (ActiveMdiChild as IMdiChildForm).DoHelp(); else DoHelp(null); } private void ribbon_btnRoleMgr_ItemClick(object sender, ItemClickEventArgs e) { if (SystemAuthentication.Authorized("menuItemRole")) OpenModuleForm("CSFrameworkV5.SystemModule.frmRole", "menuItemRole", null); else Msg.Warning(LanLib.Get("无使用权限!")); } private void ribbon_btnSendMsg_ItemClick(object sender, ItemClickEventArgs e) { if (SystemAuthentication.Authorized("menuSysMessage")) OpenModuleForm("CSFrameworkV5.SystemModule.frmBroadcast", "menuSysMessage", null); else Msg.Warning(LanLib.Get("无使用权限!")); } private void ribbon_btnShortCut_ItemClick(object sender, ItemClickEventArgs e) { if (ActiveMdiChild is IMdiChildForm) (ActiveMdiChild as IMdiChildForm).DoCreateShortCut(); } private void ribbon_btnSystemOptions_ItemClick(object sender, ItemClickEventArgs e) { if (SystemAuthentication.Authorized("menuItemSetup")) OpenModuleForm("CSFrameworkV5.SystemModule.frmSystemOptions", "menuItemSetup", null); else Msg.Warning(LanLib.Get("无使用权限!")); } private void ribbon_btnUserMgr_ItemClick(object sender, ItemClickEventArgs e) { if (SystemAuthentication.Authorized("menuItemUserMgr")) OpenModuleForm("CSFrameworkV5.SystemModule.frmUser", "menuItemUserMgr", null); else Msg.Warning(LanLib.Get("无使用权限!")); } private void ribbon_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) popToolBar.ShowPopup(e.Location); } private void ribbon_SizeChanged(object sender, EventArgs e) { var i = ribbon.ShowPageHeadersMode == ShowPageHeadersMode.Show ? 10 : 0; pnlQuickSearch.Top = i + (ribbon.Height - pnlQuickSearch.Height) / 2; } private void ribbonGallary_GalleryItemClick(object sender, GalleryItemClickEventArgs e) { //获取皮肤名称 var skinName = e.Item.Tag == null ? e.Item.Caption : e.Item.Tag.ToStringEx(); SkinTools.SetSkin(skinName); SkinTools.SetSkinItemCheck(skinName); } private void SetBridgeType(BridgeType bridgeType, BarCheckItem barItem) { var isChanged = false; var old = BridgeFactory.BridgeType; //当前设置与要求的设置不同 if (BridgeFactory.BridgeType != bridgeType) { BridgeFactory.BridgeType = bridgeType; isChanged = BridgeFactory.InitializeBridge(false); //修改失败还原状态 if (false == isChanged) BridgeFactory.BridgeType = old; } if (isChanged || barItem == null) //设置勾选状态 { btnBridgeADO.Checked = BridgeType.ADODirect == BridgeFactory.BridgeType; btnBridgeWinSvc.Checked = BridgeType.WindowsService == BridgeFactory.BridgeType; } if (old != BridgeFactory.BridgeType) Msg.ShowInformation(LanLib.Get("操作成功!")); else if (barItem != null) barItem.Checked = !barItem.Checked; //还原勾选状态 } /// /// 设置主窗体的界面环境 /// private void SetMainFormEnviroment() { //初始化皮肤选择器(Gallery) SkinHelper.InitSkinGallery(ribbonGallary, true); //加载皮肤下拉框 SkinTools.LoadSkinList(ribbon_btnSetSkin); //给Gallery组件当前皮肤名称设置焦点(选择状态) SkinTools.SetSkinGalleryCheck(ribbonGallary, SkinTools.GetCurrentSkinName()); //消息提示的预设字体颜色 _DefaultFontColor = btnMessagePrompt.Appearance.ForeColor; //显示Tabpage的按钮 if (UserConfig.Current.ShowRibbonPageHeader) btnShowTabPageHeader.PerformClick(); else //隐藏 btnHideTabPageHeader.PerformClick(); //当前授权模式是否支持登出功能, 比如Novell,Domain模式不支持登出 btnLogOut.Enabled = SystemAuthentication.Current.SupportLogout; pnlQuickSearch.Parent = ribbon; } //new 20200202 /// /// 显示数据操作按钮页面【系统功能】 /// public void ShowDataOperatePage() { ribbon.SelectedPage = ribbon.Pages[LanLib.Get("系统功能")]; } private void txtCommand_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) if (txtCommand.Text.Trim() != "") { e.Handled = true; CommandHandler.Execute(this, txtCommand.Text.Trim()); txtCommand.Text = ""; } } #region IMdiForm Members /// /// MDI主窗体的工具条按钮注册接口 /// public IToolbarRegister MdiToolbar { get => _MdiToolbar; set => _MdiToolbar = value; } /// /// MDI主窗体的观察者 /// public IObserver[] MdiObservers { get { var os = new IObserver[1]; os[0] = new ObserverCloseAllChild(this); return os; } } /// /// 注册MDI主窗体的按钮 /// public void RegisterMdiButtons() { MdiToolbar.RegisteButton(MdiButtons); } /// /// 主窗体的按钮 /// public IList MdiButtons { get { IList btns = new ArrayList(); //添加按钮 return btns; } } /// /// 显示模块主窗体 /// /// 当前模块显示名称 /// 当前模块的主菜单名称 public void ActiveModule(string moduleDisplayName, string moduleMainMenu) { _ModuleContainer.Text = moduleDisplayName; _ModuleContainer.Activate(); foreach (XtraTabPage page in _ModuleContainer.xtraTabControl1 .TabPages) if (page.AccessibleDescription.IndexOf(moduleMainMenu) > 0) { _ModuleContainer.xtraTabControl1.SelectedTabPage = page; return; } } #endregion #region 弹出菜单->关闭当前窗体->除此之外全部关闭 private void menuCloseThis_Click(object sender, EventArgs e) { //关闭当前窗体 var i = xtraTabbedMdiManager1.Pages.IndexOf(xtraTabbedMdiManager1 .SelectedPage); //当前窗体的序号 var form = xtraTabbedMdiManager1.SelectedPage.MdiChild; if (form is frmModuleContainer) { } else { form.Close(); //不关闭模块主窗体 if (xtraTabbedMdiManager1.Pages.Count - 1 >= i) //显示相邻的窗体 xtraTabbedMdiManager1.SelectedPage = xtraTabbedMdiManager1.Pages[i]; } } private void menuCloseAll_Click(object sender, EventArgs e) { //除此之外全部关闭 var currentForm = xtraTabbedMdiManager1.SelectedPage.MdiChild; //当前窗体 IList list = new ArrayList(); foreach (XtraMdiTabPage p in xtraTabbedMdiManager1.Pages) list.Add(p.MdiChild); //构建窗体列表 foreach (Form form in list) { //不关闭当前窗体,模块主窗体及模块容器窗体 if (currentForm == form || form is frmModuleContainer || form is IModuleBase) continue; form.Close(); } } private void xtraTabbedMdiManager1_MouseUp(object sender, MouseEventArgs e) { //点左键无效, 必须是点右键弹出菜单 if (e.Button != MouseButtons.Right) return; menuCloseThis.Enabled = !(xtraTabbedMdiManager1.SelectedPage.MdiChild is frmModuleContainer); //模块主窗体禁止关闭 var hint = xtraTabbedMdiManager1.CalcHitInfo(e.Location); //点击有效,且点击在TabPage标题上 if (hint.IsValid && hint.Page != null) //有效子窗体 if (xtraTabbedMdiManager1.SelectedPage.MdiChild != null) { var p = xtraTabbedMdiManager1.SelectedPage.MdiChild .PointToScreen(e.Location); menuStripCloseForm.Show(p); //显示弹出菜单 } } #endregion #region 打开其它模块的窗体 /// /// 打开其它模块的窗体 /// /// 窗体的名字空间 /// 此窗体所在模块对应的菜单名 /// 传入参数 public Form OpenModuleForm(string formFullName, string associatedMenuName, object param) { if (string.IsNullOrEmpty(formFullName)) throw new Exception(LanLib.Get("必须指定窗体的命名空间!参数:formFullName")); //预设方法:调用菜单Click打开界面,此方法不支持传入参数 if (string.IsNullOrEmpty(associatedMenuName) == false && param == null) { var items = MainMenu.Items.Find(associatedMenuName, true); //查找菜单对象 if (items.Length > 0) { items[0].PerformClick(); return null; } } //查找窗体所在的业务模块,返回模块主窗体实例(fromModuleMain) var module = _ModuleManager.FindModule(formFullName); if (module != null) { //调用fromModuleMain.OpenForm()打开指定的窗体 var form = module.OpenForm(formFullName, associatedMenuName, param); if (form != null) form.Activate(); //激活当前窗体 return form; } Msg.Warning(LanLib.Get("指定窗体所在模块没有加载或无访问权限,打开模块的窗体失败!")); return null; } /// /// 使用命令打开其它模块的窗体 /// /// 命令对象 /// 传入参数 public Form OpenModuleForm(object quickCommand) { //if (quickCommand == null || (quickCommand is QuickCommand) == false) // throw new Exception("quickCommand参数无效!"); var cmd = quickCommand as QuickCommand; Form F = null; var T = _ModuleManager.FindFormType(cmd.FormNamespace); //查找窗体类型 if (T == null) throw new Exception( LanLib.Get("指定窗体所在模块没有加载或无访问权限,打开模块的窗体失败!")); //Add:新增->创建新实例 if (cmd.CommandType == QuickCommandType.Add.ToStringEx()) { F = MdiTools.OpenChildForm(MdiTools.MainForm as IMdiForm, T, cmd.MenuName, false); if (F is IDataOperatable) (F as IDataOperatable).DoAdd(null); //调用新增方法 } else { F = MdiTools.OpenChildForm(MdiTools.MainForm as IMdiForm, T, cmd.MenuName, true); } return F; } /// /// 获取框架全局的对象类型(包括所有DLL模块的对象类型) /// /// 命名空间 /// public Type GetGlobalType(string objNamespace) { var T = _ModuleManager.FindFormType(objNamespace); return T; } #endregion #region 系统消息相关 private void btnMessagePrompt_ItemClick(object sender, ItemClickEventArgs e) { //系统消息按钮 var dt = _MessageCenter.GetMessage(Loginer.CurrentUser.Account); if (dt.Rows.Count > 0) frmPrompt.ShowMessage(dt, OnReadMessage); else btnMessagePrompt.Caption = LanLib.Get("您有(0)条未读消息"); } private void OnReadMessage(int total, int index, DataRow message) { //消息窗体回调函数 if (index == total - 1) { btnMessagePrompt.Appearance.ForeColor = _DefaultFontColor; timerTick.Stop(); timerTick.Enabled = false; } } private void timerMessage_Tick(object sender, EventArgs e) { //时钟事件 try { var dt = _MessageCenter.GetMessage(Loginer.CurrentUser.Account); btnMessagePrompt.Caption = LanLib.Get("您有(0)条未读消息").Replace("(0)", "(" + dt.Rows.Count.ToStringEx() + ")"); if (dt.Rows.Count > 0) { timerTick.Start(); } else { btnMessagePrompt.Appearance.ForeColor = _DefaultFontColor; timerTick.Stop(); } } catch (Exception ex) { timerMessage.Stop(); timerMessage.Enabled = false; timerTick.Stop(); LogUserOperate.Write(ex); } } private void timerTick_Tick(object sender, EventArgs e) { //闪烁颜色 if (btnMessagePrompt.Appearance.ForeColor == Color.Red) btnMessagePrompt.Appearance.ForeColor = _DefaultFontColor; else btnMessagePrompt.Appearance.ForeColor = Color.Red; } #endregion #region 快捷按钮控制 /// /// 根据按钮名称获得按钮 /// /// /// /// public Control GetModuleMainFormButtonByBtnName(string formFullName, string BtnName) { if (string.IsNullOrEmpty(BtnName)) return null; var module = _ModuleManager.FindModule(formFullName); { if (module != null) return module.GetModuleMainFormButtonByBtnName(BtnName); return null; } } public Control GetModuleMainFormButtonByMenuName(string formFullName, string menuName) { if (string.IsNullOrEmpty(menuName)) return null; var btn = _ModuleManager.FindModuleButtonByMenu(menuName); return btn; } /// /// 根据菜单名称获得按钮名称 /// /// /// /// public string GetModuleMainFormButtonNameByMenuName(string formFullName, string MenuName) { if (string.IsNullOrEmpty(MenuName)) return null; var btn = _ModuleManager.FindModuleButtonByMenu(MenuName); return btn != null ? btn.Name : null; } /// /// 重新布局 /// /// /// /// public void UpdateModuleButtonLocal(string formFullName) { var module = _ModuleManager.FindModule(formFullName); { if (module != null) module.UpdateButtonLocation(); else Msg.Warning(LanLib.Get("窗体所在的模块没有正常加载或没有权限,无法打开窗体!")); } } #endregion #region 设置语言相关 public virtual void DoSetLanguage(BarItem sender, LanguageType lanType) { //设置语言 if (LanLib.Current != lanType) { LanLib.Current = lanType; SetLanguage(); UserConfig.Current.LanguageID = LanLib.Current.ToStringEx(); UserConfig.Current.Save(); (sender as BarCheckItem).Checked = true; } } /// /// 主窗体设置多语言 /// public override void SetLanguage() { base.SetLanguage(); ribbon_btnCHT.Checked = LanLib.Current == LanguageType.CHT; ribbon_btnCHS.Checked = LanLib.Current == LanguageType.CHS; ribbon_btnENG.Checked = LanLib.Current == LanguageType.ENG; //菜单多语言转化思路: //1.首先转换主菜单的语言,2.然后根据主菜单创建ToolBar,3.根据主菜单创建导航菜单NavBar/树菜单TreeList SetMenuItemLanguage(); //设置菜单的语言,语言标识(ObjectID=menuXXX) RemoveCreatedItem(); //移除现有的BarItem //重新创建窗体的Toolbar按钮、导航菜单 _ModuleManager.CreateToolButtons(barMainMenu, _ModuleMenus); _ModuleManager.CreateNavBarButtons(navBarControl1, _ModuleMenus, NavigatorStyle.BarContainer); //创建导航工具栏按钮 //设置各个业务模块主窗体的语言 foreach (var moduleForm in _ModuleManager.ModuleMainForms) if (moduleForm is ILanguageSupport) (moduleForm as ILanguageSupport).SetLanguage(); //设置所有已打开窗体的语言 foreach (Form form in Application.OpenForms) if (!form.IsDisposed && form is ILanguageSupport) if (form != this) //避免重复设置主窗体的语言 (form as ILanguageSupport).SetLanguage(); //当前授权模式是否支持登出功能, 比如Novell,Domain模式不支持登出 btnLogOut.Enabled = SystemAuthentication.Current.SupportLogout; barDataSet.Caption = LanLib.Get("当前账套:") + Loginer.CurrentUser.DBID + $"({BridgeFactory.DatabaseType})"; btnLoginInfo.Caption = LanLib.Get("当前用户:") + $"({Loginer.CurrentUser.Account}-{Loginer.CurrentUser.AccountName})"; dockPanel1.Text = LanLib.Get("模块列表"); //设置窗体标题 //this.Text = LanLib.Get(Globals.DEF_PROGRAM_NAME) + Globals.DEF_PROGRAM_VERSION; Text = "MES(广深科技)"; btnBridgeType.Caption = BridgeFactory.BridgeType.ToStringEx(); //显示WCF连接地址 if (BridgeFactory.IsWCFBridge) { //取基地址 var uri = ConfigurationManager.AppSettings["ICommonService"]; uri = uri.Substring(0, uri.LastIndexOf("/")); btnBridgeWinSvc.Caption = "WCF:" + uri; btnBridgeType.Caption = "WCF:" + uri; } } /// /// 设置主窗体菜单的语言 /// private void SetMenuItemLanguage() { foreach (ToolStripMenuItem topMenu in _ModuleMenus.Items) { topMenu.Text = LanLib.GetByMatch(GetMenuLanPath(topMenu), topMenu.Text); if (topMenu.DropDownItems.Count > 0) SetMenuLanSub(topMenu); } } private void SetMenuLanSub(ToolStripMenuItem menu) { foreach (ToolStripItem subMenu in menu.DropDownItems) { subMenu.Text = LanLib.GetByMatch(GetMenuLanPath(subMenu), subMenu.Text); if (subMenu is ToolStripMenuItem && (subMenu as ToolStripMenuItem).DropDownItems.Count > 0) SetMenuLanSub(subMenu as ToolStripMenuItem); } } /// /// 获取菜单对象的语言标识 /// /// /// private string GetMenuLanPath(ToolStripItem menu) { if (menu.OwnerItem != null) return menu.OwnerItem.Name + "." + menu.Name; //menuParent.menuChild return "." + menu.Name; //.menuChild } #endregion } }