#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
}
}