/// <summary> /// 调用动态加载 /// </summary> /// <param name="e"></param> private void actionFramework(FrmworkTreeNode e) { if (e.NodeType == "Window")//调用窗体 { System.Windows.Forms.Form fromCtrl = null; fromCtrl = FormExists(this, e.FormName);//根据窗体名查找窗体 if ((e.BlankWindows) || (!e.BlankWindows && fromCtrl==null))//允许在新窗口打开或者没有生成窗体的都重新创建窗体 { string DllPathName = Application.StartupPath + @"\" + e.DllFileName; Object[] objArray = new object[3];//dll中类构造函数必须具有的参数数组 objArray[0] = e.NodeId; objArray[1] = this.UserId; objArray[2] = this.UserName; DynamicLibrary myDll = new DynamicLibrary(); myDll.DllFileName = DllPathName; myDll.DllClassName = e.DllClassName; myDll.MainForm = this; myDll.ObjArray = objArray; if (e.WindowsSDI) { fromCtrl = myDll.CallSDIWindows(); } else { fromCtrl = myDll.CallMDIWindows(); fromCtrl.Text = e.Text;//设置窗体标题 } } else//窗体已经打开,最小化的还原,并显示在最前面 { if (fromCtrl.WindowState == FormWindowState.Minimized) fromCtrl.WindowState = FormWindowState.Normal; fromCtrl.BringToFront(); } } else if (e.NodeType == "Function")//调用功能 { string DllPathName = Application.StartupPath + @"\" + e.DllFileName; Object[] objArray = new object[2];//dll中类构造函数必须具有2个参数 objArray[0] = this.UserId; objArray[1] = this.UserName; Object[] objMethodArray = new object[2];//dll中类方法必须具有的参数 objMethodArray[0] = e.NodeId; objMethodArray[1] = treeFramework.SelectedNode.Nodes; DynamicLibrary myDll = new DynamicLibrary(); myDll.DllFileName = DllPathName; myDll.DllClassName = e.DllClassName; myDll.DllMethodName = e.DllMethodName; myDll.ObjArray = objArray; myDll.ObjMethodArray = objMethodArray; myDll.CallMethod(); } }
private void treeFramework_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e) { NowtreeNode = (FrmworkTreeNode)e.Node; NowtreeNodeId = NowtreeNode.NodeId; if (NowtreeNode.MouseIsClick) try { actionFramework(NowtreeNode); } catch (Exception ex) { MessageBox.Show ("执行命令错误,错误代码:"+ex.Message.ToString(),"错误"); } }
/// <summary> /// 递归装载主窗体框架树 /// </summary> /// <param name="key"></param> /// <param name="startNodes"></param> public void LoadFrameTreeFromDB(string key, TreeNodeCollection startNodes) { if (startNodes == null) throw new Exception("调用LoadFrameTreeFromDB失败,startNodes未指定!"); //string tmpStr = "select * from FrmworkTree where isVisable=1 and FatherCode='" + key + "'";//有效的树信息 try { DataTable table = FrmworkTreeNode.GetChildNodes(key); foreach (DataRow row in table.Rows) { FrmworkTreeNode tmpNode = new FrmworkTreeNode(); tmpNode.NodeId = row["SelfCode"].ToString(); tmpNode.FatherId = row["FatherCode"].ToString(); tmpNode.ImageIndex = Convert.ToInt16(row["ImageIndex"]); tmpNode.SelectedImageIndex = Convert.ToInt16(row["ImageIndex"]); tmpNode.Text = row["Caption"].ToString(); tmpNode.DllClassName = row["DllClassName"].ToString(); tmpNode.DllFileName = row["DllFileName"].ToString(); tmpNode.DllMethodName = row["DllMethodName"].ToString(); tmpNode.FormName = row["FormName"].ToString(); tmpNode.MouseIsClick = Convert.ToBoolean(row["MouseIsClick"]); tmpNode.BlankWindows = Convert.ToBoolean(row["BlankWindows"]); tmpNode.WindowsSDI = Convert.ToBoolean(row["SDIWindows"]); tmpNode.CanVisable = Convert.ToBoolean(row["IsVisable"]); tmpNode.ContextMenuStrip = frktreeContextMenuStrip; tmpNode.Refresh = true; tmpNode.NodeType = row["NodeType"].ToString(); startNodes.Add(tmpNode); //LoadFrameTreeFromDB(tmpNode.NodeId, tmpNode.Nodes); } } catch (Exception ex) { throw ex; } }