社区
C#
帖子详情
c#画线的重绘问题
new_smile
2011-10-13 09:16:11
我做了一个画图程序,但是画直线的时候,在mouseMove事件中用到this.refresh(),也用到了protected override void OnPaint(eventArgs e) 事件,但是绘制多条直线时只能显示当前画得直线,(每画一条直线在mouseUp中将直线类放入list容器中,然后在OnPaint事件中重绘),mouseMove时能够重绘以前的直线,但是当鼠标不移动以前的直线就消失了,求高手指点啊
...全文
393
15
打赏
收藏
c#画线的重绘问题
我做了一个画图程序,但是画直线的时候,在mouseMove事件中用到this.refresh(),也用到了protected override void OnPaint(eventArgs e) 事件,但是绘制多条直线时只能显示当前画得直线,(每画一条直线在mouseUp中将直线类放入list容器中,然后在OnPaint事件中重绘),mouseMove时能够重绘以前的直线,但是当鼠标不移动以前的直线就消失了,求高手指点啊
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
new_smile
2011-10-21
打赏
举报
回复
www.iqtest.dk
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
打赏
举报
回复
代码贴出来看看
C#
TreeView
重绘
边框
C#
TreeView
重绘
边框源码
C#
winform
重绘
滚动条
C#
winform
重绘
滚动条 实现换皮肤
C#
winform
重绘
滚动条 实现换皮肤
C#
重绘
标题栏和边框
这是一个关于
C#
重绘
标题栏和边框的文本文档,先把FromBorderStyle改为None
C#
实现
画线
功能 源代码
C#
实现
画线
功能 可以直接运行 源代码
C#
TreeListView
重绘
继承Control
重绘
了一个treeListView,主要代码做了注视
C#
111,119
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章