#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
|
{
|
/// <summary>
|
/// 模块主窗体基类
|
/// </summary>
|
public partial class frmBaseModule : frmBase, IModuleBase
|
{
|
/// <summary>
|
/// 菜单和按钮对应关系
|
/// </summary>
|
protected Hashtable _MapControl = new Hashtable();
|
|
protected int _ModuleID = 0;
|
protected string _ModuleName = "";
|
|
public frmBaseModule()
|
{
|
InitializeComponent();
|
}
|
|
/// <summary>
|
/// 查询窗体
|
/// </summary>
|
/// <param name="formFullName">窗体全名</param>
|
/// <param name="menuName">菜单名</param>
|
/// <returns></returns>
|
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("打开窗伐发生错误,您可能没有此菜单的权限!"));
|
}
|
}
|
|
/// <summary>
|
/// 获得指定窗体的button控件----根据按钮名称
|
/// </summary>
|
public virtual Control GetModuleMainFormButtonByBtnName(string btnName)
|
{
|
var btn = GetControlByName(pnlContainer, btnName) as SimpleButton;
|
return btn;
|
//throw new CustomException("当前菜单没有对应的按钮!"); //此行运行时会抛出异常,用户体验不好
|
}
|
|
/// <summary>
|
/// 获得指定窗体的button控件----根据菜单名
|
/// </summary>
|
public virtual Control GetModuleMainFormButtonByMenuName(
|
string menuName)
|
{
|
if (_MapControl.Contains(menuName))
|
return _MapControl[menuName] as Control;
|
|
return null;
|
}
|
|
/// <summary>
|
/// 获得指定窗体的button控件名称----根据菜单名
|
/// </summary>
|
public virtual string GetModuleMainFormButtonNameByMenuName(
|
string menuName)
|
{
|
if (_MapControl.Contains(menuName))
|
return (_MapControl[menuName] as Control).Name;
|
|
return "";
|
}
|
|
/// <summary>
|
/// 加载自定义按钮
|
/// </summary>
|
public virtual void LoadCustomFunction()
|
{
|
}
|
|
/// <summary>
|
/// 打开窗体
|
/// </summary>
|
/// <param name="formFullName">窗体全名</param>
|
/// <param name="menuName">菜单名</param>
|
/// <param name="param">传入参数</param>
|
/// <returns></returns>
|
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方法。");
|
}
|
|
/// <summary>
|
/// 设置模块主窗体容器中所有组件的使用权限(隐藏或禁用).
|
/// </summary>
|
/// <param name="securityInfo">权限信息(系统主菜单或自它自定义对象)</param>
|
public virtual void SetSecurity(object securityInfo)
|
{
|
}
|
|
/// <summary>
|
/// 更新控件布局
|
/// </summary>
|
public virtual void UpdateButtonLocation()
|
{
|
}
|
|
/// <summary>
|
/// 绑定菜单与按钮的关系
|
/// </summary>
|
/// <param name="menu">菜单</param>
|
/// <param name="btn">按钮</param>
|
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);
|
}
|
|
/// <summary>
|
/// 获取某个子控件
|
/// </summary>
|
/// <param name="ctrl">父级控件</param>
|
/// <param name="name">名称</param>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 获取菜单
|
/// </summary>
|
/// <param name="menuName">菜单名</param>
|
/// <returns></returns>
|
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;
|
}
|
|
/// <summary>
|
/// 是否拥有菜单权限
|
/// </summary>
|
/// <param name="menuName">菜单名称</param>
|
/// <returns></returns>
|
protected bool HasPermission(string menuName)
|
{
|
return Loginer.CurrentUser.IsAdmin() ||
|
GetModuleMenuByName(menuName) != null;
|
}
|
|
/// <summary>
|
/// 加载自定义报表
|
/// </summary>
|
/// <param name="menuReports">报表菜单</param>
|
/// <param name="lbReports">报表项显示控件</param>
|
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;
|
}
|
|
/// <summary>
|
/// 模块主窗体上的按钮事件
|
/// </summary>
|
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();
|
}
|
}
|
|
/// <summary>
|
/// 打开报表, 实际是调用菜单的Click事件
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
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();
|
}
|
|
/// <summary>
|
/// 设置按钮可见
|
/// </summary>
|
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;
|
}
|
}
|
|
/// <summary>
|
/// 显示版本
|
/// </summary>
|
/// <param name="lb"></param>
|
/// <param name="version"></param>
|
protected void ShowVersion(LabelControl lb, string version)
|
{
|
lb.Text = LanLib.Get("版本:") + version;
|
}
|
|
#region IModuleBase Members
|
|
/// <summary>
|
/// 获取模块的主菜单
|
/// </summary>
|
/// <returns></returns>
|
public virtual MenuStrip GetModuleMenu()
|
{
|
return MainMenuStrip;
|
}
|
|
/// <summary>
|
/// 模块编号
|
/// </summary>
|
/// <returns></returns>
|
public virtual int ModuleID => _ModuleID;
|
|
/// <summary>
|
/// 模块名称
|
/// </summary>
|
/// <returns></returns>
|
public virtual string ModuleName => _ModuleName;
|
|
//模块主窗体容器
|
public virtual Control GetContainer()
|
{
|
return pnlContainer;
|
}
|
|
/// <summary>
|
/// 初始化按钮
|
/// </summary>
|
public virtual void InitButton()
|
{
|
}
|
|
/// <summary>
|
/// 初始化菜单
|
/// </summary>
|
public virtual void InitMenu()
|
{
|
}
|
|
#endregion
|
}
|
}
|