/** * 拖拽后更新状态和处理的位置。 * :param MouseEventArgs e 鼠标事件 * :param FlowStatus objStatus 状态对象 * <br> 处理步骤如下: * <br> 确定托拽后的新坐标 * <br> 判定新状态是否在面板坐标内,如果不在,将其改变在面板内。 * <br> 更新状态的新位置 * <br> 更新与状态关联的处理的新位置。 **/ public void updateLocation(MouseEventArgs e, FlowStatus objStatus) { objStatus.setLocation(e.X, e.Y); //this.checkStatus(objStatus);//节点是否在画板内,省略 int PosX = objStatus._x + Convert.ToInt32(objStatus._w / 2); int PosY = objStatus._y + Convert.ToInt32(objStatus._h / 2); double dblStatusId = objStatus.dblStatusId; }
/// <summary> /// 鼠标事件触发时画图的处理, /// intEvent等于1.代表鼠标按下.intEvent等于2.代表鼠标移动.intEvent等于3.代表鼠标松开; /// 处理步骤如下: ///*<br> intEvent等于1,鼠标按下时如果鼠标的坐标在某状态内,更新状态的last_x,last_y坐标(用来在以移动后更新状态坐标位置) ///* 该状态可以移动 ///*<br> intEvent等于2,如果状态可以移动,更新状态位置 ///*<br> intEvent等于3,如果状态可以移动,更新状态位置,设置该状态为不能移动。 /// </summary> /// <param name="ex">鼠标事件</param> /// <param name="intEvent">鼠标事件类型</param> public void drawMouseObjs(MouseEventArgs ex, int intEvent) { FlowStatus objStatus = this.gStatus; switch (intEvent) { case 1: //mouseDown() if (objStatus.contains(ex.X, ex.Y)) //按下的鼠标坐标在节点的范围内。 { Graphics g = this.CreateGraphics(); objStatus.last_x = objStatus._x - ex.X; objStatus.last_y = objStatus._y - ex.Y; objStatus.isMove = 1; int x1 = objStatus._x; int y1 = objStatus._y; int w1 = objStatus._w; int h1 = objStatus._h; Pen penWhite = new Pen(Color.White, 2); g.DrawRectangle(penWhite, x1, y1, w1, h1); g.FillRectangle(new SolidBrush(Color.White), x1, y1, w1, h1); g.FillRectangle(new SolidBrush(Color.White), x1 + 6, y1 + 6, w1, h1); //用白色擦掉画好的节点 g.DrawRectangle(new Pen(Color.Black), x1, y1, w1, h1); //给节点加个黑边框。代表选中了该节点,可以拖动了。 g.Dispose(); return; } break; case 2: //mouseMove() if (objStatus.isMove == 1) { Graphics g = this.CreateGraphics(); int x1 = objStatus._x; int y1 = objStatus._y; int w1 = objStatus._w; int h1 = objStatus._h; g.DrawRectangle(new Pen(Color.White), x1, y1, w1, h1); //用白色擦掉拖动时上一位置的节点 objStatus.setLocation(ex.X, ex.Y); // this.checkStatus(objStatus);//防止节点出画板外,省略。 int x2 = objStatus._x; int y2 = objStatus._y; Pen penBlack = new Pen(Color.Black); g.DrawRectangle(penBlack, x2, y2, w1, h1); //在新位置画新的带黑边框的节点 g.Dispose(); return; } break; case 3: //mouseUp() if (objStatus.isMove == 1) { updateLocation(ex, objStatus); //更新节点位置 objStatus.isMove = 0; repaint(); //在新位置处,重新画一个带颜色和阴影及节点说明的矩形框。 return; } break; }//end switch }