using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Windows.Forms; using SOH.Kernel; using SOH.Entities; using SOH.BLL; using EAS.Services; namespace SOH.Main { public partial class Main : Form { public bool isdebug = false; private Dictionary ass = new Dictionary(); private Dictionary asstype = new Dictionary(); public Main() { InitializeComponent(); } private void Main_Load(object sender, EventArgs e) { //initass(); if (isdebug) { initMenu(); } else checkPower(); } private void checkPower() { //throw new NotImplementedException(); var vser = ServiceContainer.GetService(); string ls = vser.getUserMenu(LoginUser.username); DataTable dt = Newtonsoft.Json.JsonConvert.DeserializeObject(ls, typeof(DataTable)) as DataTable; if (dt.Rows.Count > 0) { dt.DefaultView.Sort = "px"; DataTable dts = dt.DefaultView.ToTable(); foreach (DataRow dr in dts.Select("pid=0")) { bool ok = true; ToolStripMenuItem tsmi = new ToolStripMenuItem(); tsmi.Text = dr["cdname"].ToString(); if (dr["cdlx"].ToString() == "1") { if (ass.Keys.Contains(dr["assid"].ToString())) { asstype.Add(dr["fullname"].ToString(), ass[dr["assid"].ToString()]); } else { if (File.Exists(Application.StartupPath + "\\" + dr["dll"].ToString())) { Assembly a = Assembly.LoadFrom(Application.StartupPath + "\\" + dr["dll"].ToString()); ass.Add(dr["assid"].ToString(), a); asstype.Add(dr["fullname"].ToString(), ass[dr["assid"].ToString()]); } else { MessageBox.Show("没有找到DLL:" + dr["dll"].ToString()+",请联系管理员!"); ok = false; } } if (ok) { tsmi.Tag = dr["fullname"].ToString(); tsmi.Click += tsmia_Click; } } initMenu(tsmi,dts,dr["cdid"].ToString()); mainMenu.Items.Add(tsmi); } } } private void initMenu(ToolStripMenuItem intsmi, DataTable dts, string p) { foreach (DataRow dr in dts.Select("pid="+p)) { bool ok = true; ToolStripMenuItem tsmi = new ToolStripMenuItem(); tsmi.Text = dr["cdname"].ToString(); if (dr["cdlx"].ToString() == "1") { if (ass.Keys.Contains(dr["assid"].ToString())) { asstype.Add(dr["fullname"].ToString(), ass[dr["assid"].ToString()]); } else { if (File.Exists(Application.StartupPath + "\\" + dr["dll"].ToString())) { Assembly a = Assembly.LoadFrom(Application.StartupPath + "\\" + dr["dll"].ToString()); ass.Add(dr["assid"].ToString(), a); asstype.Add(dr["fullname"].ToString(), ass[dr["assid"].ToString()]); } else { MessageBox.Show("没有找到DLL:" + dr["dll"].ToString() + ",请联系管理员!"); ok = false; } } if (ok) { tsmi.Tag = dr["fullname"].ToString(); tsmi.Click += tsmia_Click; } } initMenu(tsmi, dts, dr["cdid"].ToString()); intsmi.DropDownItems.Add(tsmi); } } private void initMenu() { //throw new NotImplementedException(); //查找程序根目录下的所有dll string[] dlls = Directory.GetFiles(Application.StartupPath) .Where(p => p.ToLower().EndsWith(".dll")).ToArray(); foreach (string dll in dlls) { try { Assembly ass = Assembly.LoadFrom(dll); object[] cusatt = ass.GetCustomAttributes(typeof(AssemblyAttribute), false); if (cusatt.Length > 0) { //ToolStripItem tsi = new ToolStripItem(); ToolStripMenuItem tsmi = new ToolStripMenuItem(); AssemblyAttribute assatt = cusatt[0] as AssemblyAttribute; tsmi.Text = assatt.AssemblyName; // tsmi.Click += tsmi_Click; //mainMenu.Items.Add() this.ass.Add(assatt.ID, ass); foreach (Type t in ass.GetTypes()) { object[] matt = t.GetCustomAttributes(typeof(ModuleAttribute), false); if (matt.Length > 0) { ToolStripMenuItem tsmia = new ToolStripMenuItem(); asstype.Add(t.FullName, ass); ModuleAttribute modatt = matt[0] as ModuleAttribute; tsmia.Text = modatt.ModuleName; tsmia.Tag = t.FullName; tsmia.Click += tsmia_Click; tsmi.DropDownItems.Add(tsmia); } } mainMenu.Items.Add(tsmi); } } catch (System.Exception ex) { } } } void tsmia_Click(object sender, EventArgs e) { //throw new NotImplementedException(); ToolStripMenuItem tsmia = sender as ToolStripMenuItem; var v = mainPanle.Documents.Where(t => t.DockHandler.TabText == tsmia.Text); if (v.Any()) { var tform = v.First(); tform.DockHandler.Show(); } else { string t = tsmia.Tag.ToString(); SOH.Window.baseChildForm frm = asstype[t].CreateInstance(t) as SOH.Window.baseChildForm; frm.Show(mainPanle); } } private void Main_FormClosing(object sender, FormClosingEventArgs e) { System.Diagnostics.Process.GetCurrentProcess().Kill(); } // void tsmi_Click(object sender, EventArgs e) // { // //throw new NotImplementedException(); // } } }