private void ModuleBase_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(ModuleControl))) { ModuleControl sourceControl = e.Data.GetData(typeof(ModuleControl)) as ModuleControl; if (sourceControl.Parent == null) { ((ProcessTabPage)this.Parent).AddModule(sourceControl, this); } else { ((ProcessTabPage)this.Parent).MoveModule(sourceControl, this); } #region //if (sourceControl.Parent == null) //{ // 新建控件 // foreach (ModuleControl item in ((ProcessControl)Parent).Controls) // { // if (item.Location.Y >= this.Location.Y) // { // item.UnitIndex++; // item.Location = new Point(item.Location.X, item.Location.Y + item.Height); // } // } // sourceControl.UnitIndex = this.UnitIndex - 1; // sourceControl.Location = new Point(sourceControl.Location.X, this.Location.Y - this.Height); // sourceControl.Parent = this.Parent; //} //else if (this.Location.Y < sourceControl.Location.Y) //{ // 源控件上移 // foreach (ModuleControl item in ((ProcessControl)Parent).Controls) // { // if (item.Location.Y >= this.Location.Y && item.Location.Y < sourceControl.Location.Y) // { // item.UnitIndex++; // item.Location = new Point(item.Location.X, item.Location.Y + item.Height); // } // } // sourceControl.UnitIndex = this.UnitIndex - 1; // sourceControl.Location = new Point(sourceControl.Location.X, this.Location.Y - this.Height); //} //else if (this.Location.Y > sourceControl.Location.Y) //{ // 源控件下移 // foreach (ModuleControl item in ((ProcessControl)Parent).Controls) // { // if (item.Location.Y <= this.Location.Y && item.Location.Y > sourceControl.Location.Y) // { // item.UnitIndex--; // item.Location = new Point(item.Location.X, item.Location.Y - item.Height); // } // } // sourceControl.UnitIndex = this.UnitIndex + 1; // sourceControl.Location = new Point(sourceControl.Location.X, this.Location.Y + this.Height); //} #endregion } }
public void MoveModule(ModuleControl sourceControl, ModuleControl targetControl = null) { if (targetControl == null) { ModuleControl lastControl = LastModule(); if (lastControl != sourceControl) { foreach (ModuleControl item in Controls) { if (item.Location.Y > sourceControl.Location.Y) { item.Index--; item.Location = new Point(item.Location.X, item.Location.Y - item.Height); } } sourceControl.Index = lastControl.Index + 1; sourceControl.Location = new Point(sourceControl.Location.X, lastControl.Location.Y + lastControl.Height); } } else { if (targetControl.Location.Y < sourceControl.Location.Y) { // 源控件上移 foreach (ModuleControl item in Controls) { if (item.Location.Y >= targetControl.Location.Y && item.Location.Y < sourceControl.Location.Y) { item.Index++; item.Location = new Point(item.Location.X, item.Location.Y + item.Height); } } sourceControl.Index = targetControl.Index - 1; sourceControl.Location = new Point(sourceControl.Location.X, targetControl.Location.Y - targetControl.Height); } else if (targetControl.Location.Y > sourceControl.Location.Y) { // 源控件下移 foreach (ModuleControl item in Controls) { if (item.Location.Y <= targetControl.Location.Y && item.Location.Y > sourceControl.Location.Y) { item.Index--; item.Location = new Point(item.Location.X, item.Location.Y - item.Height); } } sourceControl.Index = targetControl.Index + 1; sourceControl.Location = new Point(sourceControl.Location.X, targetControl.Location.Y + targetControl.Height); } } SortModule(); }
public void RemoveModule(ModuleControl sourceControl) { foreach (ModuleControl item in this.Controls) { if (sourceControl.Location.Y < item.Location.Y) { item.Index--; item.Location = new Point(item.Location.X, item.Location.Y - item.Height); } } Project.GetInstance().Items[Text].Items.Remove(sourceControl.Module); sourceControl.Dispose(); SortModule(); }
public ModuleControl LastModule() { if (this.Controls.Count == 0) { return(null); } ModuleControl lastControl = Controls[0] as ModuleControl; foreach (ModuleControl item in Controls) { if (lastControl.Location.Y < item.Location.Y) { lastControl = item; } } return(lastControl); }
public void AddModule(ModuleControl sourceControl, ModuleControl targetControl = null) { if (targetControl == null) { ModuleControl lastControl = LastModule(); if (lastControl == null) { sourceControl.Index = 1; sourceControl.Location = new Point(0, 0); } else { sourceControl.Index = lastControl.Index + 1; sourceControl.Location = new Point(sourceControl.Location.X, lastControl.Location.Y + lastControl.Height); } sourceControl.Parent = this; sourceControl.Module.Owner = Project.GetInstance()[Text]; Project.GetInstance()[Text].Items.Add(sourceControl.Module); } else { foreach (ModuleControl item in Controls) { if (item.Location.Y >= targetControl.Location.Y) { item.Index++; item.Location = new Point(item.Location.X, item.Location.Y + item.Height); } } sourceControl.Index = targetControl.Index - 1; sourceControl.Location = new Point(sourceControl.Location.X, targetControl.Location.Y - targetControl.Height); sourceControl.Parent = this; sourceControl.Module.Owner = Project.GetInstance().Items[Text]; Project.GetInstance().Items[Text].Items.Insert(sourceControl.Index, sourceControl.Module); SortModule(); } }
private void Open(string fileName) { // 加载当前应用程序目录下的指定程序集 DirectoryInfo info = new DirectoryInfo(Application.StartupPath); FileInfo[] files = info.GetFiles("*Module.dll"); Dictionary <Type, Assembly> typeCollection = new Dictionary <Type, Assembly>(); foreach (var file in files) { Assembly a = Assembly.LoadFile(file.FullName); Type[] types = a.GetExportedTypes(); foreach (var type in types) { ModuleAttribute attribute = (ModuleAttribute)type.GetCustomAttribute(typeof(ModuleAttribute)); if (attribute != null) { typeCollection.Add(type, a); } } } // 从XML加载流程 XmlDocument doc = new XmlDocument(); doc.Load(fileName); XmlElement root = doc.DocumentElement; // 清理所有流程 TabProcesses.TabPages.Clear(); Project.GetInstance().Clear(); Project.GetInstance().Name = root.GetAttribute("name"); // 流程节点循环加载 foreach (XmlElement page in root.ChildNodes) { // 增加流程 ProcessTabPage tp = new ProcessTabPage(page.GetAttribute("name") /*, VisualProject*/); TabProcesses.TabPages.Add(tp); // 模块节点循环加载 foreach (XmlElement unit in page.ChildNodes) { foreach (var type in typeCollection) { // 获取类型自定义特性 ModuleAttribute des = (ModuleAttribute)type.Key.GetCustomAttribute(typeof(ModuleAttribute)); if (unit.GetAttribute("name") == des.Name) { // 增加模块 ModuleBase module = (ModuleBase)type.Value.CreateInstance(type.Key.FullName); module.Owner = Project.GetInstance()[tp.Text]; module.Index = Convert.ToInt32(unit.GetAttribute("id")); module.Load(); ModuleControl mc = new ModuleControl(module); tp.AddModule(mc); } } } } // 设置主流程 Project.GetInstance().MainProcess = Project.GetInstance()[root.GetAttribute("main")]; TabProcesses.SelectTab(Project.GetInstance().MainProcess.Name); }
private void TabProcess_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(ModuleControl))) { #region //ModuleControl sourceControl = e.Data.GetData(typeof(ModuleControl)) as ModuleControl; //if (this.Controls.Count == 0) //{ // 没有控件 // sourceControl.UnitIndex = 1; // sourceControl.Location = new Point(0, 0); // sourceControl.Parent = this; // return; //} //// 最后的控件 //ModuleControl lastControl = this.Controls[0] as ModuleControl; //foreach (ModuleControl item in this.Controls) //{ // if (lastControl.Location.Y < item.Location.Y) // { // lastControl = item; // } //} //if (lastControl.Location.Y > sourceControl.Location.Y && sourceControl.Location.Y != -1) //{ // 移动控件 // foreach (ModuleControl item in this.Controls) // { // if (item.Location.Y > sourceControl.Location.Y) // { // item.UnitIndex--; // item.Location = new Point(item.Location.X, item.Location.Y - item.Height); // } // } // sourceControl.UnitIndex = lastControl.UnitIndex + 1; // sourceControl.Location = new Point(sourceControl.Location.X, lastControl.Location.Y + lastControl.Height); //} //else if (sourceControl.Parent == null) //{ // 增加控件 // sourceControl.UnitIndex = lastControl.UnitIndex + 1; // sourceControl.Location = new Point(sourceControl.Location.X, lastControl.Location.Y + lastControl.Height); // sourceControl.Parent = this; //} #endregion ModuleControl sourceControl = e.Data.GetData(typeof(ModuleControl)) as ModuleControl; if (sourceControl.Parent == null) { AddModule(sourceControl); } else { MoveModule(sourceControl); } } }