社区
C#
帖子详情
c#画线的重绘问题
new_smile
2011-10-13 09:16:11
我做了一个画图程序,但是画直线的时候,在mouseMove事件中用到this.refresh(),也用到了protected override void OnPaint(eventArgs e) 事件,但是绘制多条直线时只能显示当前画得直线,(每画一条直线在mouseUp中将直线类放入list容器中,然后在OnPaint事件中重绘),mouseMove时能够重绘以前的直线,但是当鼠标不移动以前的直线就消失了,求高手指点啊
...全文
441
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#
编写画直线,简单
画线
,鼠标交互
画线
,画一条线
本文详细介绍如何使用
C#
在窗体应用中实现
画线
功能。通过VS创建窗体项目,利用PictureBox控件和Graphics类,结合鼠标事件实现动态绘制线条。适合初学者实践绘图操作。
C#
画点
画线
写字
本文介绍了在
C#
中进行图形绘制时遇到的
问题
及解决方案,重点在于如何解决画点
画线
过快导致屏幕无法及时刷新的
问题
,通过使用缓存技术实现了正常显示。适合想要提升
C#
代码能力的开发者阅读。
Unity
画线
之SetPixel
本文介绍了一种在Unity中使用RawImage组件实现
画线
功能的方法,通过
重绘
像素来绘制线条,虽然当前算法可能导致卡顿,但为后续优化提供了基础。文中详细展示了RawImage初始化、偏移量获取及绘制过程的代码实现。
C#
中GDI绘制后不显示
问题
原因分析与解决,与控件
重绘
相关的方法区别
本文详细解析了
C#
中GDI+绘图的常见
问题
与解决方法,探讨了绘图代码放置的最佳实践,以及如何正确使用Refresh、Invalidate和Update函数来控制控件的
重绘
过程。通过实例说明了不同刷新机制的使用场景和效果差异。
关于
c#
在picturebox
画线
闪一下消失的
问题
博主想在PictureBox上画中心十字架,遇到画出的线闪一下消失的
问题
。代码中有显示和隐藏十字架的按钮,点击按钮
画线
正常,但刷新图片后重画会闪。通过调用两次按钮响应函数找到解决办法,在原
画线
函数中先调用Refresh()再
画线
,线就不会消失。
C#
111,129
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章