📄 flowmap.cs
字号:
/*
*author: l_dragon email:l_dragon2000@163.com
*last update:2003/04/03
* */
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Xml;
namespace gdiFlow
{
/// <summary>
/// FlowMap 的摘要说明。
/// </summary>
public class FlowMap : System.Windows.Forms.UserControl
{
private System.ComponentModel.IContainer components;
//7种状态对应菜单
private System.Windows.Forms.ContextMenu menuStatus;
private System.Windows.Forms.MenuItem menuAdd;
private System.Windows.Forms.MenuItem menuBegin;
private System.Windows.Forms.MenuItem menuCommon;
private System.Windows.Forms.MenuItem menuChild;
private System.Windows.Forms.MenuItem menuAuto;
private System.Windows.Forms.MenuItem menuBranch;
private System.Windows.Forms.MenuItem menuTogether;
private System.Windows.Forms.MenuItem menuGoto;
private System.Windows.Forms.MenuItem menuEnd;
//状态处理对应的操作菜单
private System.Windows.Forms.ContextMenu menuDelSet;
private System.Windows.Forms.MenuItem menuDelStatus;
private System.Windows.Forms.MenuItem menuSetStatus;
private System.Collections.ArrayList aryStatus=new ArrayList();//存放所有status对象,
private System.Collections.ArrayList aryDisposal=new ArrayList();//存放所有Disposal对象
public FlowStatus gStatus;//在Form中被选中的唯一状态;
private FlowStatus gFrom=null,gTo=null;//画线时的from 和 to
private int intMouseX;//鼠标按下时坐标x值
private int intMouseY;//鼠标按下时坐标Y值
private bool blCtrlDown=false;//ctrl键是否按下
private int intStatusW=90;//状态对象矩形的宽度;
private int intStautsH=45;//状态对象矩形的高度;
/*
* 状态类型ID,STATUS_TYPE_ID
* 0 开始
1 结束
2 普通
3 子流
4 自动
5 分流
6 合流
7 转流程
*/
private int intStatusType;//状态类型
public FlowMap()
{
// 该调用是 Windows.Forms 窗体设计器所必需的。
InitializeComponent();
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Component Designer generated code
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
//
// FlowMap
//
this.Name = "FlowMap";
this.Size = new System.Drawing.Size(512, 344);
this.Load += new System.EventHandler(this.FlowMap_Load);
this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.myMouseUp);
this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.myKeyUp);
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.myKeyDown);
this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.myMouseMove);
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.myMouseDown);
}
#endregion
private void menuBegin_Click(object sender, System.EventArgs e)
{
this.intStatusType=0;
addStatus();
}
private void menuCommon_Click(object sender, System.EventArgs e)
{
this.intStatusType=2;
addStatus();
}
private void menuChild_Click(object sender, System.EventArgs e)
{
this.intStatusType=3;
addStatus();
}
private void menuAuto_Click(object sender, System.EventArgs e)
{
this.intStatusType=4;
addStatus();
}
private void menuBranch_Click(object sender, System.EventArgs e)
{
this.intStatusType=5;
addStatus();
}
private void menuTogether_Click(object sender, System.EventArgs e)
{
this.intStatusType=6;
addStatus();
}
private void menuGoto_Click(object sender, System.EventArgs e)
{
this.intStatusType=7;
addStatus();
}
private void menuEnd_Click(object sender, System.EventArgs e)
{
this.intStatusType=1;
addStatus();
}
public void addStatus()
{
//增加状态按钮按下,新建一个状态,在状态列表中增加一个状态对象.
//如果状态对象列表中有已经被删除的状态对象,
//将其在新位置重新显示
for(int i=0;i<aryStatus.Count;i++)
{
FlowStatus objTempS=(FlowStatus)aryStatus[i];
if(objTempS.blDisplay==false)
{
objTempS._x=this.intMouseX;
objTempS._y=this.intMouseY;
objTempS.intStatusTypeId=this.intStatusType;
objTempS.blDisplay=true;
int j=i+1;
objTempS.dblStatusId=Convert.ToDouble(j);
objTempS.strStatusName="状态"+Convert.ToString(j);
repaint();
return;
}
}
FlowStatus objStatus=new FlowStatus(intMouseX,intMouseY,this.intStatusW,this.intStautsH);
objStatus.intStatusTypeId=this.intStatusType;
int intI=aryStatus.Count+1;
objStatus.dblStatusId=Convert.ToDouble(intI);
objStatus.strStatusName="状态"+Convert.ToString(intI);
this.aryStatus.Add(objStatus);
repaint();
}
//删除一个状态(status)对象
private void menuDelStatus_Click(object sender, System.EventArgs e)
{
if(this.gStatus!=null)
{
if(gStatus.intStatusTypeId==0)
{
MessageBox.Show("开始状态不能删除!");
return;
}
if(gStatus.intStatusTypeId==1)
{
MessageBox.Show("结束状态不能删除!");
return;
}
double tempStatusId=gStatus.dblStatusId;
int j=aryDisposal.Count;
for(int i=0;i<j;i++)
{
FlowDisposal objDisp=(FlowDisposal)aryDisposal[i];
if(objDisp.dblCurStatusId==tempStatusId || objDisp.dblPreStatusId==tempStatusId)
{
objDisp.clearProperty();
}
}
this.gStatus.clearProperty();
this.gStatus=null;
}
}
private void menuSetStatus_Click(object sender, System.EventArgs e)
{
frmStatusSet frmSet=new frmStatusSet();
frmSet.setThisStatus(this.gStatus);
frmSet.setAryStatus(this.aryStatus);
frmSet.setAryDisposal(this.aryDisposal);
frmSet.MaximizeBox=false;
frmSet.MinimizeBox=false;
frmSet.ShowDialog();
repaint();
}
//显示增加时的右键菜单
public void showMenu(MouseEventArgs ex)
{
this.intMouseX=ex.X;
this.intMouseY=ex.Y;
this.menuStatus = new System.Windows.Forms.ContextMenu();
this.menuAdd = new System.Windows.Forms.MenuItem();
this.menuBegin = new System.Windows.Forms.MenuItem();
this.menuCommon = new System.Windows.Forms.MenuItem();
this.menuChild = new System.Windows.Forms.MenuItem();
this.menuAuto = new System.Windows.Forms.MenuItem();
this.menuBranch = new System.Windows.Forms.MenuItem();
this.menuTogether = new System.Windows.Forms.MenuItem();
this.menuGoto = new System.Windows.Forms.MenuItem();
this.menuEnd = new System.Windows.Forms.MenuItem();
//
// menuStatus
//
this.menuStatus.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuAdd});
//
// menuAdd
//
this.menuAdd.Index = 0;
this.menuAdd.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.menuBegin,
this.menuCommon,
this.menuChild,
this.menuAuto,
this.menuBranch,
this.menuTogether,
this.menuGoto,
this.menuEnd});
this.menuAdd.Text = "添加状态";
//
// menuBegin
//
this.menuBegin.Index = 0;
this.menuBegin.Text = "开始";
this.menuBegin.Click += new System.EventHandler(this.menuBegin_Click);
//
// menuCommon
//
this.menuCommon.Index = 1;
this.menuCommon.Text = "普通";
this.menuCommon.Click += new System.EventHandler(this.menuCommon_Click);
//
// menuChild
//
this.menuChild.Index = 2;
this.menuChild.Text = "子流";
this.menuChild.Click += new System.EventHandler(this.menuChild_Click);
//
// menuAuto
//
this.menuAuto.Index = 3;
this.menuAuto.Text = "自动";
this.menuAuto.Click += new System.EventHandler(this.menuAuto_Click);
//
// menuBranch
//
this.menuBranch.Index = 4;
this.menuBranch.Text = "分流";
this.menuBranch.Click += new System.EventHandler(this.menuBranch_Click);
//
// menuTogether
//
this.menuTogether.Index = 5;
this.menuTogether.Text = "合流";
this.menuTogether.Click += new System.EventHandler(this.menuTogether_Click);
//
// menuGoto
//
this.menuGoto.Index = 6;
this.menuGoto.Text = "转流程";
this.menuGoto.Click += new System.EventHandler(this.menuGoto_Click);
//
// menuEnd
//
this.menuEnd.Index = 7;
this.menuEnd.Text = "结束";
this.menuEnd.Click += new System.EventHandler(this.menuEnd_Click);
this.ContextMenu= this.menuStatus;
}
//设置处理的右键菜单
public void showStatusMenu()
{
this.menuDelSet=new System.Windows.Forms.ContextMenu();
this.menuDelStatus =new System.Windows.Forms.MenuItem() ;
this.menuSetStatus =new System.Windows.Forms.MenuItem();
this.menuDelStatus.Text="删除";
this.menuDelStatus.Click += new System.EventHandler(this.menuDelStatus_Click);
this.menuSetStatus.Text="属性";
this.menuSetStatus.Click += new System.EventHandler(this.menuSetStatus_Click);
this.menuDelSet.MenuItems.Add(menuDelStatus);
this.menuDelSet.MenuItems.Add("-");
this.menuDelSet.MenuItems.Add(menuSetStatus); this.ContextMenu=this.menuDelSet;
}
public void myMouseDown(object sender, MouseEventArgs ex)
{
int intClickCount=ex.Clicks;
if(ex.Button == MouseButtons.Left)
{
if(intClickCount==1)
{
this.drawMouseObjs(ex,1);
}
if(intClickCount==2 )//鼠标左键双击
{
this.gStatus=this.SelectStatus(ex.X,ex.Y);//选中了某状态对象
if(gStatus!=null)
{
frmStatusSet frmSet=new frmStatusSet();
frmSet.setThisStatus(this.gStatus);
frmSet.setAryStatus(this.aryStatus);
frmSet.setAryDisposal(this.aryDisposal);
frmSet.MaximizeBox=false;
frmSet.MinimizeBox=false;
frmSet.ShowDialog();
repaint();
}
}
}
if(ex.Button == MouseButtons.Right)//鼠标右键
{
this.gStatus=this.SelectStatus(ex.X,ex.Y);//选中了某状态对象
if(gStatus!=null)
{
this.showStatusMenu(); //显示设置当前状态对象的菜单
}
else
{
showMenu(ex);//显示增加对象的菜单
}
}
}
public void myMouseMove(object sender, MouseEventArgs ex)
{
if(ex.Button == MouseButtons.Left )
{
this.drawMouseObjs(ex,2);
}
}
public void myMouseUp(object sender, MouseEventArgs ex)
{
if(ex.Button == MouseButtons.Left )
{
this.drawMouseObjs(ex,3);
}
}
public void myKeyDown(object sender, KeyEventArgs ex)
{
if(ex.Control==true)//键盘中ctrl键被按下
{
int intCount=this.aryStatus.Count;
if(intCount==0)
{
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -