123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- using DevExpress.XtraBars;
- using DevExpress.XtraBars.Ribbon;
- using ProjectBase.Data.BaseDAL;
- using ProjectBase.Data.Logs;
- using SIASUN.Autopilot.BLL;
- using SIASUN.Autopilot.Model;
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace SIASUN.Autopilot.View.RibbonPageHelper
- {
- /// <summary>
- /// 动态创建RibbonPage和其下面的按钮项目辅助类
- /// </summary>
- public class RibbonPageHelper
- {
- //BlRoleRight bl = new BlRoleRight();
- private RibbonControl control;
- public FormMain mainForm;
- public RibbonPageHelper(FormMain mainForm, ref RibbonControl control)
- {
- this.mainForm = mainForm;
- this.control = control;
- }
- public void AddPages()
- {
- #region 初始化数据
- string condition = null;
- //BlMenuInfo menu = new BlMenuInfo();
- List<MoMenuInfo> moFirstList = null; // 一级标题
- condition = string.Format(" menu_winform_type = '1' AND menu_delete = 0");
- moFirstList = BLLFactory<BlMenuInfo>.Instance.Find(condition);
- #endregion
- int i = 0;
- foreach (MoMenuInfo firstInfo in moFirstList)
- {
- //如果没有菜单的权限,则跳过
- //if (!BLLFactory<BlRoleRight>.Instance.Function(SysEnvironment.CurrentLoginID, firstInfo.ID)) continue;
- //添加页面(一级菜单)
- RibbonPage page = new DevExpress.XtraBars.Ribbon.RibbonPage();
- page.Text = firstInfo.Name;
- page.Name = firstInfo.ID;
- this.control.Pages.Insert(i++, page);
- List<MoMenuInfo> moSecondList = null;// 二级标题
- condition = string.Format(" menu_winform_type = '2' AND menu_parent_id = '{0}' AND menu_delete = 0", firstInfo.ID);
- moSecondList = BLLFactory<BlMenuInfo>.Instance.Find(condition);
- if (moSecondList.Count == 0) continue;
- foreach (MoMenuInfo secondInfo in moSecondList)
- {
- //如果没有菜单的权限,则跳过
- //if (!BLLFactory<BlRoleRight>.Instance.Function(SysEnvironment.CurrentLoginID, secondInfo.ID)) continue;
- //添加RibbonPageGroup(二级菜单)
- if (!secondInfo.PID.Equals(firstInfo.ID))
- continue;
- RibbonPageGroup group = new RibbonPageGroup();
- group.Text = secondInfo.Name;
- group.Name = secondInfo.ID;
- page.Groups.Add(group);
- List<MoMenuInfo> moThirdList = null; // 三级标题
- condition = string.Format(" menu_winform_type = '3' AND menu_parent_id = '{0}' AND menu_delete = 0", secondInfo.ID);
- moThirdList = BLLFactory<BlMenuInfo>.Instance.Find(condition);
- if (moThirdList.Count == 0) continue;
- foreach (MoMenuInfo thirdInfo in moThirdList)
- {
- //如果没有菜单的权限,则跳过
- //if (!BLLFactory<BlRoleRight>.Instance.Function(SysEnvironment.CurrentLoginID, thirdInfo.ID)) continue;
- //添加功能按钮(三级菜单)
- if (!thirdInfo.PID.Equals(secondInfo.ID))
- continue;
- BarButtonItem button = new BarButtonItem();
- button.PaintStyle = BarItemPaintStyle.CaptionGlyph;
- button.LargeGlyph = LoadIcon(thirdInfo.Icon);
- button.Glyph = LoadIcon(thirdInfo.Icon);
- button.Name = thirdInfo.ID;
- button.Caption = thirdInfo.Name;
- button.Tag = thirdInfo.Url;
- button.ItemClick += (sender, e) =>
- {
- if (button.Tag != null && !string.IsNullOrEmpty(button.Tag.ToString()))
- {
- Type type = Type.GetType(button.Tag.ToString());
- LoadMdiForm(mainForm, type);
- }
- //else
- //{
- // //MessageDxUtil.ShowTips(button.Caption);
- //}
- };
- group.ItemLinks.Add(button);
- }
- }
- }
- }
- /// <summary>
- /// 加载图标,如果加载不成功,那么使用默认图标
- /// </summary>
- /// <param name="iconPath"></param>
- /// <returns></returns>
- private Image LoadIcon(string iconPath)
- {
- string filePath = Application.StartupPath + "\\Images\\100.ico";
- Icon icon = Icon.ExtractAssociatedIcon(filePath);
- Image result = icon.ToBitmap();
- try
- {
- if (!string.IsNullOrEmpty(iconPath))
- {
- string path = Application.StartupPath + iconPath;
- if (File.Exists(path))
- {
- result = Image.FromFile(path);
- }
- }
- }
- catch
- {
- LogHelper.log.Error(string.Format("无法识别图标地址:{0},请确保该文件存在!", iconPath));
- }
- return result;
- }
- /// <summary>
- /// 加载插件窗体
- /// </summary>
- private void LoadPlugInForm(string typeName)
- {
- try
- {
- string[] itemArray = typeName.Split(new char[] { ',', ';' });
- string type = itemArray[0].Trim();
- string filePath = itemArray[1].Trim();//必须是相对路径
- //判断是否配置了显示模式,默认窗体为Show非模式显示
- string showDialog = (itemArray.Length > 2) ? itemArray[2].ToLower() : "";
- bool isShowDialog = (showDialog == "1") || (showDialog == "dialog");
- string dllFullPath = Path.Combine(Application.StartupPath, filePath);
- Assembly tempAssembly = System.Reflection.Assembly.LoadFrom(dllFullPath);
- if (tempAssembly != null)
- {
- Type objType = tempAssembly.GetType(type);
- if (objType != null)
- {
- //LoadMdiForm(this.mainForm, objType, isShowDialog);
- }
- }
- }
- catch (Exception ex)
- {
- LogHelper.log.Error(string.Format("加载模块【{0}】失败,请检查书写是否正确。", typeName), ex);
- }
- }
- /// <summary>
- /// 唯一加载某个类型的窗体,如果存在则显示,否则创建。
- /// </summary>
- /// <param name="mainDialog">主窗体对象</param>
- /// <param name="formType">待显示的窗体类型</param>
- /// <returns></returns>
- public static Form LoadMdiForm(Form mainDialog, Type formType)
- {
- bool bFound = false;
- Form tableForm = null;
- foreach (Form form in mainDialog.MdiChildren)
- {
- if (form.GetType() == formType)
- {
- bFound = true;
- tableForm = form;
- break;
- }
- }
- if (!bFound)
- {
- tableForm = (Form)Activator.CreateInstance(formType);
- tableForm.MdiParent = mainDialog;
- tableForm.Show();
- }
- //tableForm.Dock = DockStyle.Fill;
- //tableForm.WindowState = FormWindowState.Maximized;
- tableForm.BringToFront();
- tableForm.Activate();
- return tableForm;
- }
- }
- }
|