c#画线的重绘问题

new_smile 2011-10-13 09:16:11
我做了一个画图程序,但是画直线的时候,在mouseMove事件中用到this.refresh(),也用到了protected override void OnPaint(eventArgs e) 事件,但是绘制多条直线时只能显示当前画得直线,(每画一条直线在mouseUp中将直线类放入list容器中,然后在OnPaint事件中重绘),mouseMove时能够重绘以前的直线,但是当鼠标不移动以前的直线就消失了,求高手指点啊
...全文
375 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
new_smile 2011-10-21
  • 打赏
  • 举报
回复
new_smile 2011-10-21
  • 打赏
  • 举报
回复
[url=www.iqtest.dk][Color=red/url]
new_smile 2011-10-14
  • 打赏
  • 举报
回复
程序代码,中的mouseMove,mouseUp和OnPaint事件如上,QQ295414435在线等帮助,谢了
new_smile 2011-10-14
  • 打赏
  • 举报
回复
private void DrawBox_MouseMove(object sender, MouseEventArgs e)
{
Graphics g = this.CreateGraphics();
g.SmoothingMode = SmoothingMode.AntiAlias;

if (drawLineOrder == true &&drawOrder==true )
{
this.Refresh();
endPoint = new Point(e.X, e.Y);
DL = new DrawLine(beginPoint,endPoint,ColorOrder);
DL.DrawAction(g);

}

}private void DrawBox_MouseUp(object sender, MouseEventArgs e)
{
Graphics g = this.CreateGraphics();
g.SmoothingMode = SmoothingMode.AntiAlias;

//this.Refresh();
if (drawOrder)
{

endPoint = new Point(e.X,e.Y);

drawLine.Add(DL);

drawOrder = false;
}

}
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = this.CreateGraphics();
g.SmoothingMode = SmoothingMode.AntiAlias;

if (Cross != null)
{
foreach(CrossClass CrossCla in Cross)
{
CrossCla.DrawCross(g);
}
}
if(drawLine.Count>0)
{
foreach(DrawLine DraLin in drawLine)
{
DraLin.DrawAction(g);
g.ResetTransform();
}
}
base.OnPaint(e);
}
new_smile 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 classbob 的回复:]

你的OnPaint事件中直接用e.Graphics,不要再CreateGraphics
[/Quote]太感谢了,大哥,太爱你了,解决了,哈哈这个世界终于平静了!呵呵,激动中
classbob 2011-10-14
  • 打赏
  • 举报
回复
你的OnPaint事件中直接用e.Graphics,不要再CreateGraphics
new_smile 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 classbob 的回复:]

你画图用的是窗口的Graphics,画的东西会被DrawBox盖住呀
可以去掉DrawBox,处理窗体的Mouse事件,直接在窗体上画;或者处理DrawBox的Paint事件
[/Quote]drawbox是我给窗体取的名字,其实就是直接在窗体上画的,不过从来没释放过Graphics,呵呵,OnPaint()是窗体的函数吧,还有其实画图窗体是放在MidParent窗体容器中的,和容器窗体有关吗,应该是重绘的时候覆盖掉了吧,还是不明白,不过这个Invalidate()+Update()倒是没有用过,呵呵,试试看,谢了
classbob 2011-10-14
  • 打赏
  • 举报
回复
还有,Graphics用完最好显式释放下
classbob 2011-10-14
  • 打赏
  • 举报
回复
另外,MouseUp事件最后调用下Refresh或者Invalidate()+Update()
classbob 2011-10-14
  • 打赏
  • 举报
回复
你画图用的是窗口的Graphics,画的东西会被DrawBox盖住呀
可以去掉DrawBox,处理窗体的Mouse事件,直接在窗体上画;或者处理DrawBox的Paint事件
zzdxwg 2011-10-14
  • 打赏
  • 举报
回复
就是啊,这个怎么整的
classbob 2011-10-14
  • 打赏
  • 举报
回复
OnPaint是窗体的函数?
feixuyue 2011-10-14
  • 打赏
  • 举报
回复
在mouseMove事件中用到this.refresh(),
去掉
classbob 2011-10-13
  • 打赏
  • 举报
回复
代码贴出来看看

111,094

社区成员

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

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

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