#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
|
{
|
/// <summary>
|
/// 系统主窗体(MDI主窗体)
|
/// </summary>
|
public partial class frmMain1 : frmBase, IMdiForm
|
{
|
/// <summary>
|
/// 关闭窗体状态,用户在登录窗体强制退出系统IsClosing=True
|
/// </summary>
|
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();
|
}
|
|
/// <summary>
|
/// 获取ToolBar的按钮
|
/// </summary>
|
/// <param name="buttonName"></param>
|
/// <returns></returns>
|
public object GetToolBarButton(string buttonName)
|
{
|
foreach (BarItem item in ribbon.Items)
|
if (item.Name == buttonName)
|
return item;
|
|
return null;
|
}
|
|
/// <summary>
|
/// 系统主菜单(各模块主菜单的集合)
|
/// </summary>
|
public MenuStrip MainMenu => _ModuleMenus;
|
|
/// <summary>
|
/// 删除菜单功能(包括主菜单、导航菜单、Bar菜单)
|
/// </summary>
|
/// <param name="menuName">菜单名称</param>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 检查数据窗体是否没有保存数据
|
/// </summary>
|
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;
|
}
|
|
/// <summary>
|
/// 初始化MDI主窗体,在登录窗体显示加载状态。
|
/// </summary>
|
/// <param name="splash">登录窗体上的进度显示组件</param>
|
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;
|
}
|
}
|
|
/// <summary>
|
/// 使用默认IE浏览器打开指定的URL网页
|
/// </summary>
|
/// <param name="link"></param>
|
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();
|
}
|
|
/// <summary>
|
/// 取系统广播消息
|
/// </summary>
|
private void ReadSystemMessage()
|
{
|
var msg = new bllMessageCenter().GetBroadcastMessage();
|
lbSystemMSG.Caption =
|
string.IsNullOrEmpty(msg) ? LanLib.Get("暂无消息.") : msg;
|
}
|
|
/// <summary>
|
/// 移除现有的BarItem
|
/// </summary>
|
private void RemoveCreatedItem()
|
{
|
try
|
{
|
barMainMenu.BeginUpdate();
|
var list = new List<BarItemLink>();
|
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; //还原勾选状态
|
}
|
|
/// <summary>
|
/// 设置主窗体的界面环境
|
/// </summary>
|
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
|
/// <summary>
|
/// 显示数据操作按钮页面【系统功能】
|
/// </summary>
|
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
|
|
/// <summary>
|
/// MDI主窗体的工具条按钮注册接口
|
/// </summary>
|
public IToolbarRegister MdiToolbar
|
{
|
get => _MdiToolbar;
|
set => _MdiToolbar = value;
|
}
|
|
/// <summary>
|
/// MDI主窗体的观察者
|
/// </summary>
|
public IObserver[] MdiObservers
|
{
|
get
|
{
|
var os = new IObserver[1];
|
os[0] = new ObserverCloseAllChild(this);
|
return os;
|
}
|
}
|
|
/// <summary>
|
/// 注册MDI主窗体的按钮
|
/// </summary>
|
public void RegisterMdiButtons()
|
{
|
MdiToolbar.RegisteButton(MdiButtons);
|
}
|
|
/// <summary>
|
/// 主窗体的按钮
|
/// </summary>
|
public IList MdiButtons
|
{
|
get
|
{
|
IList btns = new ArrayList();
|
//添加按钮
|
return btns;
|
}
|
}
|
|
/// <summary>
|
/// 显示模块主窗体
|
/// </summary>
|
/// <param name="moduleDisplayName">当前模块显示名称</param>
|
/// <param name="moduleMainMenu">当前模块的主菜单名称</param>
|
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 打开其它模块的窗体
|
|
/// <summary>
|
/// 打开其它模块的窗体
|
/// </summary>
|
/// <param name="formFullName">窗体的名字空间</param>
|
/// <param name="associatedMenuName">此窗体所在模块对应的菜单名</param>
|
/// <param name="param">传入参数</param>
|
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;
|
}
|
|
/// <summary>
|
/// 使用命令打开其它模块的窗体
|
/// </summary>
|
/// <param name="quickCommand">命令对象</param>
|
/// <param name="param">传入参数</param>
|
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;
|
}
|
|
/// <summary>
|
/// 获取框架全局的对象类型(包括所有DLL模块的对象类型)
|
/// </summary>
|
/// <param name="objNamespace">命名空间</param>
|
/// <returns></returns>
|
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 快捷按钮控制
|
|
/// <summary>
|
/// 根据按钮名称获得按钮
|
/// </summary>
|
/// <param name="formFullName"></param>
|
/// <param name="BtnName"></param>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 根据菜单名称获得按钮名称
|
/// </summary>
|
/// <param name="formFullName"></param>
|
/// <param name="ControlName"></param>
|
/// <returns></returns>
|
public string GetModuleMainFormButtonNameByMenuName(string formFullName,
|
string MenuName)
|
{
|
if (string.IsNullOrEmpty(MenuName)) return null;
|
|
var btn = _ModuleManager.FindModuleButtonByMenu(MenuName);
|
return btn != null ? btn.Name : null;
|
}
|
|
/// <summary>
|
/// 重新布局
|
/// </summary>
|
/// <param name="formFullName"></param>
|
/// <param name="ControlName"></param>
|
/// <returns></returns>
|
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;
|
}
|
}
|
|
/// <summary>
|
/// 主窗体设置多语言
|
/// </summary>
|
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;
|
}
|
}
|
|
/// <summary>
|
/// 设置主窗体菜单的语言
|
/// </summary>
|
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);
|
}
|
}
|
|
/// <summary>
|
/// 获取菜单对象的语言标识
|
/// </summary>
|
/// <param name="menu"></param>
|
/// <returns></returns>
|
private string GetMenuLanPath(ToolStripItem menu)
|
{
|
if (menu.OwnerItem != null)
|
return menu.OwnerItem.Name + "." +
|
menu.Name; //menuParent.menuChild
|
|
return "." + menu.Name; //.menuChild
|
}
|
|
#endregion
|
}
|
}
|