📄 flowmap.cs
字号:
strType="自动";
break;
case 5:
strType="分流";
break;
case 6:
strType="合流";
break;
case 7:
strType="转流程";
break;
}
Font drawFont = new Font("宋体", 9);
StringFormat drawFormat = new StringFormat();
drawFormat.Alignment = StringAlignment.Center;
SolidBrush drawBrush = new SolidBrush(Color.Black);
RectangleF drawRect = new RectangleF( x1, y1, w1, Convert.ToInt32(h1*0.6));
RectangleF drawRect2 = new RectangleF( x1, y1+Convert.ToInt32(h1*0.6), w1, Convert.ToInt32(h1*0.4));
g.DrawString(strType,drawFont, drawBrush, drawRect, drawFormat);
g.DrawString(strName,drawFont, new SolidBrush(Color.White), drawRect2, drawFormat);
}//end if
}//end for
g.Dispose();//画代表状态的矩形
this.drawAllDisposal();//画线
}
public FlowStatus SelectStatus(int mouseX,int mouseY)//通过鼠标点的位置找到包含该点的状态对象
{
FlowStatus objStatus=null;
int statusSize=aryStatus.Count;
if(statusSize==0) return null;
foreach (Object item in aryStatus)
{
FlowStatus objTemp=(FlowStatus)item;
if(objTemp.contains(mouseX,mouseY))
{
objStatus=objTemp;
return objStatus;
}
}
return objStatus;
}
private void FlowMap_Load(object sender, System.EventArgs e)
{
}
public string objToXml()//将拓扑图生成xml字符串
{
try
{
XmlDocument doc= new XmlDocument();
doc.LoadXml("<root></root>");//根节点
XmlNode root = doc.DocumentElement;
XmlElement elemMap = doc.CreateElement("FlowMap");//拓扑图节点
XmlAttribute mapAttr = doc.CreateAttribute("ID");//拓扑图编号
mapAttr.Value = "1";
elemMap.Attributes.Append(mapAttr);
XmlElement elemStatusList=doc.CreateElement("StatusList");//状态对象列表节点
elemMap.AppendChild(elemStatusList);
foreach(FlowStatus itemStatus in this.aryStatus)
{
if(itemStatus.blDisplay)//状态对象没有被删除
{
XmlElement elemStatus = doc.CreateElement("Status");//状态对象节点
XmlAttribute StatusAttr = doc.CreateAttribute("statusId");//状态对象编号
StatusAttr.Value =Convert.ToString(itemStatus.dblStatusId);
elemStatus.Attributes.Append(StatusAttr);
//状态对象的其余属性用xml节点来表示
XmlElement elemstatusTypeId = doc.CreateElement("statusTypeId");
elemstatusTypeId.InnerText=Convert.ToString(itemStatus.intStatusTypeId);
elemStatus.AppendChild(elemstatusTypeId);
XmlElement elemstatusName = doc.CreateElement("statusName");
elemstatusName.InnerText=itemStatus.strStatusName;
elemStatus.AppendChild(elemstatusName);
XmlElement elemstatusX = doc.CreateElement("statusX");
elemstatusX.InnerText=Convert.ToString(itemStatus._x);
elemStatus.AppendChild(elemstatusX);
XmlElement elemstatusY = doc.CreateElement("statusY");
elemstatusY.InnerText=Convert.ToString(itemStatus._y);
elemStatus.AppendChild(elemstatusY);
XmlElement elemstatusJoinRule = doc.CreateElement("statusJoinRule");
elemstatusJoinRule.InnerText=Convert.ToString(itemStatus.strJoinRule);
elemStatus.AppendChild(elemstatusJoinRule);
XmlElement elemstatusInterfixField = doc.CreateElement("statusInterfixField");
elemstatusInterfixField.InnerText=Convert.ToString(itemStatus.strInterfixField);
elemStatus.AppendChild(elemstatusInterfixField);
XmlElement elemsstatusComExtend = doc.CreateElement("statusComExtend");
elemsstatusComExtend.InnerText=itemStatus.strComExtend;
elemStatus.AppendChild(elemsstatusComExtend);
XmlElement elemstatusChildFlowType = doc.CreateElement("statusChildFlowType");
elemstatusChildFlowType.InnerText=itemStatus.strChildFlowType;
elemStatus.AppendChild(elemstatusChildFlowType);
XmlElement elemstatusChildFlowHint = doc.CreateElement("statusChildFlowHint");
elemstatusChildFlowHint.InnerText=itemStatus.strChildFlowHint;
elemStatus.AppendChild(elemstatusChildFlowHint);
XmlElement elemstatusChildFlow = doc.CreateElement("statusChildFlow");
elemstatusChildFlow.InnerText=itemStatus.strChildFlow;
elemStatus.AppendChild(elemstatusChildFlow);
XmlElement elemstatusChangeFlowName = doc.CreateElement("statusChangeFlowName");
elemstatusChangeFlowName.InnerText=itemStatus.strChangeFlowName;
elemStatus.AppendChild(elemstatusChangeFlowName);
XmlElement elemstatusChangeStatusName = doc.CreateElement("statusChangeStatusName");
elemstatusChangeStatusName.InnerText=itemStatus.strChangeStatusName;
elemStatus.AppendChild(elemstatusChangeStatusName);
XmlElement elemstatusAutoFieldList = doc.CreateElement("statusAutoFieldList");
elemstatusAutoFieldList.InnerText=itemStatus.strAutoFieldList;
elemStatus.AppendChild(elemstatusAutoFieldList);
XmlElement elemstatusAutoRule = doc.CreateElement("statusAutoRule");
elemstatusAutoRule.InnerText=itemStatus.strAutoRule;
elemStatus.AppendChild(elemstatusAutoRule);
XmlElement elemstatusAutoFieldName = doc.CreateElement("statusAutoFieldName");
elemstatusAutoFieldName.InnerText=itemStatus.strAutoFieldName;
elemStatus.AppendChild(elemstatusAutoFieldName);
XmlElement elemstatusJoinRule2= doc.CreateElement("statusJoinRule2");
elemstatusJoinRule2.InnerText=itemStatus.strJoinRule2;
elemStatus.AppendChild(elemstatusJoinRule2);
elemStatusList.AppendChild(elemStatus);//将状态对象加入到状态对象列表中
}
}
XmlElement elemDisposalList=doc.CreateElement("DisposalList");//处理对象列表节点
elemMap.AppendChild(elemDisposalList);
foreach(FlowDisposal itemDisp in this.aryDisposal)
{
if(itemDisp.blDisplay)//没有被删除
{
XmlElement elemDisp= doc.CreateElement("Disposal");//处理对象节点
XmlAttribute DispAttr = doc.CreateAttribute("disposalId");//处理对象编号
DispAttr.Value =Convert.ToString(itemDisp.dblDisposalId);
elemDisp.Attributes.Append(DispAttr);
//处理对象的其余属性用xml节点来表示
XmlElement elemdisposalName = doc.CreateElement("disposalName");
elemdisposalName.InnerText=itemDisp.strDisposalName;
elemDisp.AppendChild(elemdisposalName);
XmlElement elemdisposalHint = doc.CreateElement("disposalHint");
elemdisposalHint.InnerText=itemDisp.strDisposalHint;
elemDisp.AppendChild(elemdisposalHint);
XmlElement elemdisposalTransactStatusId = doc.CreateElement("disposalTransactStatusId");
elemdisposalTransactStatusId.InnerText=Convert.ToString(itemDisp.dblTransactStatusId);
elemDisp.AppendChild(elemdisposalTransactStatusId);
XmlElement elemdisposalGroupLimit = doc.CreateElement("disposalGroupLimit");
elemdisposalGroupLimit.InnerText=Convert.ToString(itemDisp.intGroupLimit);
elemDisp.AppendChild(elemdisposalGroupLimit);
XmlElement elemdisposalCurStatusId = doc.CreateElement("disposalCurStatusId");
elemdisposalCurStatusId.InnerText=Convert.ToString(itemDisp.dblCurStatusId);
elemDisp.AppendChild(elemdisposalCurStatusId);
XmlElement elemdisposalPreStatusId = doc.CreateElement("disposalPreStatusId");
elemdisposalPreStatusId.InnerText=Convert.ToString(itemDisp.dblPreStatusId);
elemDisp.AppendChild(elemdisposalPreStatusId);
XmlElement elemdisposalX = doc.CreateElement("disposalX");
elemdisposalX.InnerText=Convert.ToString(itemDisp.intCurX);
elemDisp.AppendChild(elemdisposalX);
XmlElement elemdisposalY = doc.CreateElement("disposalY");
elemdisposalY.InnerText=Convert.ToString(itemDisp.intCurY);
elemDisp.AppendChild(elemdisposalY);
XmlElement elemX1 = doc.CreateElement("X1");
elemX1.InnerText=Convert.ToString(itemDisp.x1);
elemDisp.AppendChild(elemX1);
XmlElement elemY1 = doc.CreateElement("Y1");
elemY1.InnerText=Convert.ToString(itemDisp.y1);
elemDisp.AppendChild(elemY1);
XmlElement elemX2 = doc.CreateElement("X2");
elemX2.InnerText=Convert.ToString(itemDisp.x2);
elemDisp.AppendChild(elemX2);
XmlElement elemY2 = doc.CreateElement("Y2");
elemY2.InnerText=Convert.ToString(itemDisp.y2);
elemDisp.AppendChild(elemY2);
elemDisposalList.AppendChild(elemDisp);
}
}
root.AppendChild(elemMap);
return doc.OuterXml;
}
catch(Exception e)
{
string strError="格式错误,转换出错!";
MessageBox.Show(strError);
return strError;
}
}
public void xmlToObj(string strXml)//将xml字符转换成拓扑图
{
this.aryStatus.Clear();
this.aryDisposal.Clear();
this.Controls.Clear();
try
{
XmlDocument doc= new XmlDocument();
doc.LoadXml(strXml);//根节点
XmlNodeList eMapList=doc.GetElementsByTagName("FlowMap");
XmlNode eMapNode=eMapList[0];//拓扑图对象
double tmpFlowId=Convert.ToDouble(eMapNode.Attributes["ID"].Value);//拓扑图编号
XmlNodeList eStatusList=doc.GetElementsByTagName("Status");
for(int i=0;i<eStatusList.Count;i++)
{
FlowStatus objTemp=new FlowStatus(0,0,this.intStatusW,this.intStautsH);
XmlNode eStatus=eStatusList[i];//状态对象
objTemp.dblStatusId= Convert.ToDouble(eStatus.Attributes["statusId"].Value);//状态编号
if (eStatus.HasChildNodes)
{
for (int j=0; j<eStatus.ChildNodes.Count; j++)
{
if(eStatus.ChildNodes[j].Name.Equals("statusTypeId"))
{
objTemp.intStatusTypeId=Convert.ToInt32(eStatus.ChildNodes[j].InnerText);
}
if(eStatus.ChildNodes[j].Name.Equals("statusName"))
{
objTemp.strStatusName=eStatus.ChildNodes[j].InnerText;
}
if(eStatus.ChildNodes[j].Name.Equals("statusX"))
{
objTemp._x =Convert.ToInt32(eStatus.ChildNodes[j].InnerText);
}
if(eStatus.ChildNodes[j].Name.Equals("statusY"))
{
objTemp._y =Convert.ToInt32(eStatus.ChildNodes[j].InnerText);
}
if(eStatus.ChildNodes[j].Name.Equals("statusJoinRule"))
{
objTemp.strJoinRule =eStatus.ChildNodes[j].InnerText;
}
if(eStatus.ChildNodes[j].Name.Equals("statusInterfixField"))
{
objTemp.strInterfixField =eStatus.ChildNodes[j].InnerText;
}
if(eStatus.ChildNodes[j].Name.Equals("statusComExtend"))
{
objTemp.strComExtend =eStatus.ChildNodes[j].InnerText;
}
if(eStatus.ChildNodes[j].Name.Equals("statusChildFlowType"))
{
objTemp.strChildFlowType =eStatus.ChildNodes[j].InnerText;
}
if(eStatus.ChildNodes[j].Name.Equals("statusChildFlowHint"))
{
objTemp.strChildFlowHint =eStatus.ChildNodes[j].InnerText;
}
if(eStatus.ChildNodes[j].Name.Equals("statusChildFlow"))
{
objTemp.strChildFlow =eStatus.ChildNodes[j].InnerText;
}
if(eStatus.ChildNodes[j].Name.Equals("statusChangeFlowName"))
{
objTemp.strChangeFlowName =eStatus.ChildNodes[j].InnerText;
}
if(eStatus.ChildNodes[j].Name.Equals("statusChangeStatusName"))
{
objTemp.strChangeStatusName =eStatus.ChildNodes[j].InnerText;
}
if(eStatus.ChildNodes[j].Name.Equals("statusAutoFieldList"))
{
objTemp.strAutoFieldList =eStatus.ChildNodes[j].InnerText;
}
if(eStatus.ChildNodes[j].Name.Equals("statusAutoRule"))
{
objTemp.strAutoRule =eStatus.ChildNodes[j].InnerText;
}
if(eStatus.ChildNodes[j].Name.Equals("statusAutoFieldName"))
{
objTemp.strAutoFieldName =eStatus.ChildNodes[j].InnerText;
}
if(eStatus.ChildNodes[j].Name.Equals("statusJoinRule2"))
{
objTemp.strJoinRule2 =eStatus.ChildNodes[j].InnerText;
}
}//end for
}//end if
this.aryStatus.Add(objTemp);
}//end for
XmlNodeList eDispList=doc.GetElementsByTagName("Disposal");
for(int i=0;i<eDispList.Count;i++)
{
FlowDisposal tmpDisp=new FlowDisposal();
XmlNode eDisposal=eDispList[i];//状态对象
tmpDisp.dblDisposalId= Convert.ToDouble(eDisposal.Attributes["disposalId"].Value);//状态编号
if (eDisposal.HasChildNodes)
{
for (int j=0; j<eDisposal.ChildNodes.Count; j++)
{
if(eDisposal.ChildNodes[j].Name.Equals("disposalName"))
{
tmpDisp.strDisposalName =eDisposal.ChildNodes[j].InnerText;
}
if(eDisposal.ChildNodes[j].Name.Equals("disposalHint"))
{
tmpDisp.strDisposalHint =eDisposal.ChildNodes[j].InnerText;
}
if(eDisposal.ChildNodes[j].Name.Equals("disposalTransactStatusId"))
{
tmpDisp.dblTransactStatusId=Convert.ToDouble(eDisposal.ChildNodes[j].InnerText);
}
if(eDisposal.ChildNodes[j].Name.Equals("disposalGroupLimit"))
{
tmpDisp.intGroupLimit=Convert.ToInt32(eDisposal.ChildNodes[j].InnerText);
}
if(eDisposal.ChildNodes[j].Name.Equals("disposalCurStatusId"))
{
tmpDisp.dblCurStatusId=Convert.ToDouble(eDisposal.ChildNodes[j].InnerText);
}
if(eDisposal.ChildNodes[j].Name.Equals("disposalPreStatusId"))
{
tmpDisp.dblPreStatusId=Convert.ToDouble(eDisposal.ChildNodes[j].InnerText);
}
if(eDisposal.ChildNodes[j].Name.Equals("disposalX"))
{
tmpDisp.intCurX=Convert.ToInt32(eDisposal.ChildNodes[j].InnerText);
}
if(eDisposal.ChildNodes[j].Name.Equals("disposalY"))
{
tmpDisp.intCurY=Convert.ToInt32(eDisposal.ChildNodes[j].InnerText);
}
if(eDisposal.ChildNodes[j].Name.Equals("X1"))
{
tmpDisp.x1=Convert.ToInt32(eDisposal.ChildNodes[j].InnerText);
}
if(eDisposal.ChildNodes[j].Name.Equals("Y1"))
{
tmpDisp.y1=Convert.ToInt32(eDisposal.ChildNodes[j].InnerText);
}
if(eDisposal.ChildNodes[j].Name.Equals("X2"))
{
tmpDisp.x2=Convert.ToInt32(eDisposal.ChildNodes[j].InnerText);
}
if(eDisposal.ChildNodes[j].Name.Equals("Y2"))
{
tmpDisp.y2=Convert.ToInt32(eDisposal.ChildNodes[j].InnerText);
}
}//end for
}//end if
tmpDisp.getFormwh(this.Width,this.Height);
tmpDisp.setLabelProp();
this.aryDisposal.Add(tmpDisp);
}//end for
this.repaint();
}//end try
catch(Exception e)
{
string strError="格式错误,转换出错!";
MessageBox.Show(strError);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -