如何在Panel上画出直线?

new_smile 2011-07-03 10:44:14
public class LineObj
{
private Point m_start;
private Point m_end;
public LineObj(Point start,Point end)
{
this.m_start = start;
this.m_end = end;

}
public void draw(Graphics g, Pen pen)
{
g.DrawLine(pen,m_start,m_end);
}

}

private Point m_startPoint = Point.Empty;
List<LineObj> lineList = new List<LineObj>();
private void drawLine(Graphics graphics, Point startPoint, Point endPoint)
{
BufferedGraphicsContext context = BufferedGraphicsManager.Current;
BufferedGraphics bg = context.Allocate(graphics,this.ClientRectangle);
bg.Graphics.Clear(this.BackColor);
foreach(LineObj line in this.lineList)
{
line.draw(bg.Graphics,SystemPens.ControlText);
}
bg.Graphics.DrawLine(SystemPens.ControlText,startPoint,endPoint);
bg.Render();
bg.Dispose();
bg = null;

}

private void onPaint(object sender, PaintEventArgs e)
{
foreach(LineObj line in this.lineList)
{
line.draw(e.Graphics,SystemPens.ControlText);
}
}

private void panel1_MouseDown(object sender, MouseEventArgs e)
{
// base.OnMouseDown(e);
this.m_startPoint = new Point(e.X,e.Y);
}

private void panel1_MouseMove(object sender, MouseEventArgs e)
{
//base.OnMouseMove(e);
if(e.Button==MouseButtons.Left)
{
this.drawLine(this.CreateGraphics(),m_startPoint,new Point(e.X,e.Y));
}
}

private void panel1_MouseUp(object sender, MouseEventArgs e)
{
//base.OnMouseUp(e);
LineObj line = new LineObj(this.m_startPoint,e.Location);
this.lineList.Add(line);
这个它不会显示出画在panel上的直线,只会有画在窗体上的直线,该如何修改呢?
...全文
273 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
bdmh 2011-07-03
  • 打赏
  • 举报
回复
在OnPaint中吧e.Graphic传递个Line实例,不要总是CreateGraphics,这个CreateGraphics是this(窗体的)
new_smile 2011-07-03
  • 打赏
  • 举报
回复
OK了,哈哈,谢谢很有帮助,panel也有CreateGraphics方法啊,改了this.CreateGraphics()为,panel1.CreateGraphics()就可以了,

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧