想绘制一个矩形框 绘制出来的怎么是实心矩形
public void StartGraphics(Point start, Point end)
{
Graphics g = Graphics.FromImage(pcb.Image);
Pen p = new Pen(Color.Red, 3);
float width = end.X - start.X;
float height = end.Y - start.Y;
g.DrawRectangle(p, start.X, start.Y, width, height);
//g.DrawLine(p, start_point,new Point(end_point.X,start_point.Y));
//g.DrawLine(p, start_point, new Point(start_point.X, end_point.Y));
//g.DrawLine(p, end_point, new Point(end_point.X, start_point.Y));
//g.DrawLine(p, end_point, new Point(start_point.X, end_point.Y));
pcb.Invalidate();
} private void Pcb_MouseEnter(object sender, EventArgs e)
{
pcb.Cursor = Cursors.Cross; }
Point start_point;//相对于pcb的坐标
Point end_point;//相对于pcb的坐标
bool m_down=false;
private void Pcb_MouseDown(object sender, MouseEventArgs e)
{ m_down = true;
Point pcb_top_point = new Point(0, pcb.Top); Point fm_point = this.PointToClient(Control.MousePosition);
start_point.Y = fm_point.Y - pcb_top_point.Y;//真实的鼠标起始位置要算上窗口鼠标位置+pcb离form.top的距离
start_point.X = fm_point.X;//X轴无变化
} private void Pcb_MouseUp(object sender, MouseEventArgs e)
{
Point pcb_top_point = new Point(0, pcb.Top); Point fm_point = this.PointToClient(Control.MousePosition);
end_point.Y = fm_point.Y - pcb_top_point.Y;//真实的鼠标起始位置要算上窗口鼠标位置+pcb离form.top的距离
end_point.X = fm_point.X;//X轴无变化 m_down = false;
} private void Pcb_Paint(object sender, PaintEventArgs e)
{ } private void Pcb_MouseMove(object sender, MouseEventArgs e)
{
if (m_down==false)//如果中途松开了鼠标左键 则放弃绘制
{
return;
}
else
{
Point pcb_top_point = new Point(0, pcb.Top); Point fm_point = this.PointToClient(Control.MousePosition);
end_point.Y = fm_point.Y - pcb_top_point.Y;//真实的鼠标起始位置要算上窗口鼠标位置+pcb离form.top的距离
end_point.X = fm_point.X;//X轴无变化
StartGraphics(start_point, end_point);
} }
public void StartGraphics(Point start, Point end)
{
Graphics g = Graphics.FromImage(pcb.Image);
Pen p = new Pen(Color.Red, 3);
float width = end.X - start.X;
float height = end.Y - start.Y;
g.DrawRectangle(p, start.X, start.Y, width, height);
//g.DrawLine(p, start_point,new Point(end_point.X,start_point.Y));
//g.DrawLine(p, start_point, new Point(start_point.X, end_point.Y));
//g.DrawLine(p, end_point, new Point(end_point.X, start_point.Y));
//g.DrawLine(p, end_point, new Point(start_point.X, end_point.Y));
pcb.Invalidate();
} private void Pcb_MouseEnter(object sender, EventArgs e)
{
pcb.Cursor = Cursors.Cross; }
Point start_point;//相对于pcb的坐标
Point end_point;//相对于pcb的坐标
bool m_down=false;
private void Pcb_MouseDown(object sender, MouseEventArgs e)
{ m_down = true;
Point pcb_top_point = new Point(0, pcb.Top); Point fm_point = this.PointToClient(Control.MousePosition);
start_point.Y = fm_point.Y - pcb_top_point.Y;//真实的鼠标起始位置要算上窗口鼠标位置+pcb离form.top的距离
start_point.X = fm_point.X;//X轴无变化
} private void Pcb_MouseUp(object sender, MouseEventArgs e)
{
Point pcb_top_point = new Point(0, pcb.Top); Point fm_point = this.PointToClient(Control.MousePosition);
end_point.Y = fm_point.Y - pcb_top_point.Y;//真实的鼠标起始位置要算上窗口鼠标位置+pcb离form.top的距离
end_point.X = fm_point.X;//X轴无变化 m_down = false;
} private void Pcb_Paint(object sender, PaintEventArgs e)
{ } private void Pcb_MouseMove(object sender, MouseEventArgs e)
{
if (m_down==false)//如果中途松开了鼠标左键 则放弃绘制
{
return;
}
else
{
Point pcb_top_point = new Point(0, pcb.Top); Point fm_point = this.PointToClient(Control.MousePosition);
end_point.Y = fm_point.Y - pcb_top_point.Y;//真实的鼠标起始位置要算上窗口鼠标位置+pcb离form.top的距离
end_point.X = fm_point.X;//X轴无变化
StartGraphics(start_point, end_point);
} }
能随着鼠标的拖动而变化