社区
C#
帖子详情
c#画线的重绘问题
new_smile
2011-10-13 09:16:11
我做了一个画图程序,但是画直线的时候,在mouseMove事件中用到this.refresh(),也用到了protected override void OnPaint(eventArgs e) 事件,但是绘制多条直线时只能显示当前画得直线,(每画一条直线在mouseUp中将直线类放入list容器中,然后在OnPaint事件中重绘),mouseMove时能够重绘以前的直线,但是当鼠标不移动以前的直线就消失了,求高手指点啊
...全文
375
15
打赏
收藏
c#画线的重绘问题
我做了一个画图程序,但是画直线的时候,在mouseMove事件中用到this.refresh(),也用到了protected override void OnPaint(eventArgs e) 事件,但是绘制多条直线时只能显示当前画得直线,(每画一条直线在mouseUp中将直线类放入list容器中,然后在OnPaint事件中重绘),mouseMove时能够重绘以前的直线,但是当鼠标不移动以前的直线就消失了,求高手指点啊
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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`控件的边框
重绘
,以创建独一无二的视觉效果。 首先,了解`TreeView`的基本属性和方法。`TreeView`控件具有`Nodes`集合,用于添加、删除或操作节点;`DrawMode`属性可以设置...
C#
winform
重绘
滚动条
本文将深入探讨如何在
C#
WinForm中实现滚动条的
重绘
。 首先,我们要理解WinForm中的控件绘制机制。Windows Forms控件的绘制主要依赖于控件的Paint事件。为了自定义滚动条,我们需要覆盖`VScrollBar`或`HScrollBar`...
C#
重绘
标题栏和边框
###
C#
重绘
标题栏和边框的知识点 在
C#
中,自定义窗口的外观是一种常见的需求,尤其是在创建具有独特界面的应用程序时。本文档将详细介绍如何通过
C#
编程语言来实现对窗体的标题栏和边框进行
重绘
。 #### 1. 基本概念...
C#
实现
画线
功能 源代码
一个简单的
C#
画线
程序可能包含以下几个部分:声明`Graphics`对象和`Pen`对象,设置
画线
的起点和终点,订阅控件的`Paint`事件并在事件处理函数中使用`DrawLine()`方法,以及可能的鼠标事件处理,如`MouseDown`和`...
C#
TreeListView
重绘
在本项目中,我们看到的主题是"
C#
TreeListView
重绘
",这意味着开发者已经实现了自定义的
重绘
功能,以满足特定的界面需求或视觉效果。 `Control`类是所有Windows窗体控件的基础,它包含了基本的事件处理、绘图和...
C#
111,094
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章