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