急!!!关于c#里GDI+绘图问题 在pictureBox的mouseMove事件里通过CreateGraphics绘图无效,但是换成用bitmap,然后pic.Image=bmp就是正常的,我在测试项目里是都可以的,但是在我们软件里就有这样的问题,不知道有没有人跟我一样的,因为我找了一天了也没找出来什么问题!C#GDI+Graphics绘图 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该是有其他代码在刷新,把CreateGraphics画出来的东西给充掉了,屏蔽下其他代码调试下; CreateGraphic是画在控件表面的,只要有遮挡或是控件大小等更新就会把刷掉可以考虑将代码写在Paint事件里 因为我在测试程序里再paint事件实时跟随鼠标移动绘图速度很慢,才在mouseMove时直接画的,代码很简单,我们程序里的那个pictureBox的更新更新已经关了,窗体也没有resize啊,我就是不明白为什么这样画不出来。 private void pic1_MouseMove(object sender, MouseEventArgs e) { pic1.Invalidate(); pic1.Update(); Graphics gg = pic1.CreateGraphics(); gg.DrawLine(new Pen(Brushes.Red), 0, intY, pic1.Width, intY); gg.DrawLine(new Pen(Brushes.Red), intX, 0, intX, pic1.Height); } 刚才代码里的intX,intY是代表e.X,e.Y,刚才复制时忘记改过来了。 代码上看不出异常,试试删除pic1.Invalidate();在不清屏的情况下看看它到底有没有绘制上去. 我刚刚试了,去掉Invalidate也是没画出来我的pictureBox开始赋的有背景图的,我在测试程序里也是模拟的有背景图,所以不应该是受背景图backGroundImage的影响的。 Pen pen = new Pen(Brushes.Red); private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { pictureBox1.Invalidate(); } private void pictureBox1_Paint(object sender, PaintEventArgs e) { var p = this.pictureBox1.PointToClient(MousePosition); e.Graphics.DrawLine(pen, 0, p.Y, pictureBox1.Width, p.Y); e.Graphics.DrawLine(pen, p.X, 0, p.X, pictureBox1.Height); } 看看pictureBox的父容器有没有什么刷新的代码,从而引起pictureBox被强制要求刷新。 我刚刚试了,在pictureBox的paint事件里加了监视,发现不执行invalidate时鼠标在上面也是在不停地触发paint,这应该就是问题所在(为什么会不停触发),我在测试程序里如果不执行invalidate,鼠标在pictureBox上时不触发paint的,我们的工程里的timer定时更新的我都已经屏蔽掉了,用的是MDI窗体,请问还有什么情况可以导致这样的呢? private void pic1_MouseMove(object sender, MouseEventArgs e) { pic1.Refresh(); Graphics gg = pic1.CreateGraphics(); gg.DrawLine(new Pen(Brushes.Red), 0, intY, pic1.Width, intY); gg.DrawLine(new Pen(Brushes.Red), intX, 0, intX, pic1.Height); } 杠杆发现我的程序在invalidate(Refresh)之后paint重绘了一次,drawLine之后又重绘了一次,就是画完图之后自己又重绘了,所以没图,不知道为什么。 高手高手快来啊,现在的问题就是为什么draw了以后又自动重绘了,有哪些可能的原因呀,测试里是只有invalidate后才执行了一次重绘 还是正则字符串问题 dll中的方法 正则表达式替换问题? 新手问题,好心人指导,窗体小测试 求一个好的算法! c#如何调用一个VC的DLL中的多个函数? 关于切换输入法程序不响应的有谁有好的方法解决了吗?顶着有分! 水晶报表超级难得问题,谁能解决就是高手中的高手!!! 怎样知道一个字符串是否可以转换为数字? Aforge同時显示多个摄像头的问题(急) C#如何下载已经完成的网页??? c# webBrowser控件的问题
因为我在测试程序里再paint事件实时跟随鼠标移动绘图速度很慢,才在mouseMove时直接画的,代码很简单,我们程序里的那个pictureBox的更新更新已经关了,窗体也没有resize啊,我就是不明白为什么这样画不出来。
private void pic1_MouseMove(object sender, MouseEventArgs e)
{
pic1.Invalidate();
pic1.Update();
Graphics gg = pic1.CreateGraphics();
gg.DrawLine(new Pen(Brushes.Red), 0, intY, pic1.Width, intY);
gg.DrawLine(new Pen(Brushes.Red), intX, 0, intX, pic1.Height);
}
我刚刚试了,去掉Invalidate也是没画出来我的pictureBox开始赋的有背景图的,我在测试程序里也是模拟的有背景图,所以不应该是受背景图backGroundImage的影响的。
Pen pen = new Pen(Brushes.Red); private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
pictureBox1.Invalidate();
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
var p = this.pictureBox1.PointToClient(MousePosition);
e.Graphics.DrawLine(pen, 0, p.Y, pictureBox1.Width, p.Y);
e.Graphics.DrawLine(pen, p.X, 0, p.X, pictureBox1.Height);
}
我刚刚试了,在pictureBox的paint事件里加了监视,发现不执行invalidate时鼠标在上面也是在不停地触发paint,这应该就是问题所在(为什么会不停触发),我在测试程序里如果不执行invalidate,鼠标在pictureBox上时不触发paint的,我们的工程里的timer定时更新的我都已经屏蔽掉了,用的是MDI窗体,请问还有什么情况可以导致这样的呢?
{
pic1.Refresh();
Graphics gg = pic1.CreateGraphics();
gg.DrawLine(new Pen(Brushes.Red), 0, intY, pic1.Width, intY);
gg.DrawLine(new Pen(Brushes.Red), intX, 0, intX, pic1.Height);
}
杠杆发现我的程序在invalidate(Refresh)之后paint重绘了一次,drawLine之后又重绘了一次,就是画完图之后自己又重绘了,所以没图,不知道为什么。