#region using System; using System.Collections; using System.Windows.Forms; using CSFrameworkV5.Common; using CSFrameworkV5.Core; using CSFrameworkV5.Language; using CSFrameworkV5.Library.CommonClass; using DevExpress.XtraEditors; #endregion namespace CSFrameworkV5.Library { /// /// 模块主窗体基类 /// public partial class frmBaseModule : frmBase, IModuleBase { /// /// 菜单和按钮对应关系 /// protected Hashtable _MapControl = new Hashtable(); protected int _ModuleID = 0; protected string _ModuleName = ""; public frmBaseModule() { InitializeComponent(); } /// /// 查询窗体 /// /// 窗体全名 /// 菜单名 /// public virtual Type FindForm(string formFullName, string menuName) { try { //查找菜单 var menu = (MdiParent as IMdiForm).MainMenu.Items.Find(menuName, true); if (menu == null || menu.Length == 0 || (menu[0].Enabled = false)) throw new CustomException(LanLib.Get("没有找到菜单项:") + menuName + "!\r\n\r\n" + LanLib.Get("您可能没有此菜单的权限!")); var formType = GetType().Assembly.ManifestModule .GetType(formFullName); return formType; } catch (Exception ex) { LogUserOperate.Write(ex.Message, this); throw new Exception(LanLib.Get("打开窗伐发生错误,您可能没有此菜单的权限!")); } } /// /// 获得指定窗体的button控件----根据按钮名称 /// public virtual Control GetModuleMainFormButtonByBtnName(string btnName) { var btn = GetControlByName(pnlContainer, btnName) as SimpleButton; return btn; //throw new CustomException("当前菜单没有对应的按钮!"); //此行运行时会抛出异常,用户体验不好 } /// /// 获得指定窗体的button控件----根据菜单名 /// public virtual Control GetModuleMainFormButtonByMenuName( string menuName) { if (_MapControl.Contains(menuName)) return _MapControl[menuName] as Control; return null; } /// /// 获得指定窗体的button控件名称----根据菜单名 /// public virtual string GetModuleMainFormButtonNameByMenuName( string menuName) { if (_MapControl.Contains(menuName)) return (_MapControl[menuName] as Control).Name; return ""; } /// /// 加载自定义按钮 /// public virtual void LoadCustomFunction() { } /// /// 打开窗体 /// /// 窗体全名 /// 菜单名 /// 传入参数 /// public virtual Form OpenForm(string formFullName, string menuName, object param) { var T = GetType().Assembly.GetType(formFullName); if (T != null) return MdiTools.OpenChildForm(MdiTools.MainForm as IMdiForm, T, menuName, param); throw new Exception(LanLib.Get("无法获取类型!") + formFullName); //throw new NotImplementedException("请在目标窗体所在的主模块复写OpenForm()方法,参考《财务模块》的frmAccountMain.OpenForm方法。"); } /// /// 设置模块主窗体容器中所有组件的使用权限(隐藏或禁用). /// /// 权限信息(系统主菜单或自它自定义对象) public virtual void SetSecurity(object securityInfo) { } /// /// 更新控件布局 /// public virtual void UpdateButtonLocation() { } /// /// 绑定菜单与按钮的关系 /// /// 菜单 /// 按钮 public virtual void AddToMapControl(ToolStripMenuItem menu, SimpleButton btn) { if (_MapControl.Contains(menu.Name)) throw new Exception(LanLib.Get("已经添加过主键:") + menu.Name); _MapControl.Add(menu.Name, btn); } /// /// 获取某个子控件 /// /// 父级控件 /// 名称 /// private Control GetControlByName(Control ctrl, string name) { Control tempControl = null; if (ctrl.Name == name) tempControl = ctrl; else if (ctrl.Controls.Count > 0) foreach (Control subCtrl in ctrl.Controls) { var tb = GetControlByName(subCtrl, name); if (tb != null) { tempControl = tb; break; } } return tempControl; } /// /// 获取菜单 /// /// 菜单名 /// protected virtual ToolStripItem GetModuleMenuByName(string menuName) { var mainMenu = (MdiTools.MainForm as IMdiForm).MainMenu; //主窗体的菜单 var items = mainMenu.Items.Find(menuName, true); if (items.Length > 0) return items[0]; return null; } /// /// 是否拥有菜单权限 /// /// 菜单名称 /// protected bool HasPermission(string menuName) { return Loginer.CurrentUser.IsAdmin() || GetModuleMenuByName(menuName) != null; } /// /// 加载自定义报表 /// /// 报表菜单 /// 报表项显示控件 protected void LoadReportList(ToolStripMenuItem menuReports, ImageListBoxControl lbReports) { lbReports.Items.Clear(); lbReports.ImageList = ilReports; foreach (ToolStripItem item in menuReports.DropDownItems) { if (item is ToolStripSeparator) continue; lbReports.Items.Add(new ItemObject(item.Text, item), 0); } lbReports.Click += OnReportsClick; } /// /// 模块主窗体上的按钮事件 /// public virtual void OnButtonClick(object sender, EventArgs e) { if (sender == null) return; if (sender is Control) if ((sender as Control).Tag != null) { var item = (sender as Control).Tag as ToolStripItem; item.PerformClick(); } } /// /// 打开报表, 实际是调用菜单的Click事件 /// /// /// protected virtual void OnReportsClick(object sender, EventArgs e) { var item = (sender as ImageListBoxControl).SelectedValue as ItemObject; if (item != null && item.Value is ToolStripItem) (item.Value as ToolStripItem).PerformClick(); } /// /// 设置按钮可见 /// protected virtual void SetButtonVisiableByMapping() { Control button; ToolStripItem tmp; foreach (string menu in _MapControl.Keys) { button = (Control)_MapControl[menu]; tmp = GetModuleMenuByName(menu); //禁用与可视属性同时设置 button.Enabled = tmp != null && tmp.Enabled; button.Visible = button.Enabled; } } /// /// 显示版本 /// /// /// protected void ShowVersion(LabelControl lb, string version) { lb.Text = LanLib.Get("版本:") + version; } #region IModuleBase Members /// /// 获取模块的主菜单 /// /// public virtual MenuStrip GetModuleMenu() { return MainMenuStrip; } /// /// 模块编号 /// /// public virtual int ModuleID => _ModuleID; /// /// 模块名称 /// /// public virtual string ModuleName => _ModuleName; //模块主窗体容器 public virtual Control GetContainer() { return pnlContainer; } /// /// 初始化按钮 /// public virtual void InitButton() { } /// /// 初始化菜单 /// public virtual void InitMenu() { } #endregion } }