关于graphics的重绘问题!(答对马上结帖) 事实上,拖动滚动条的时候form也在重画偶觉得你最好把画图的东西写在一个函数里,重画的时候调用 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在你的InitialMap中必须重画你每条直线!你可以将直线作为一个对象保存起来 private void pnlFlow_Paint(object sender, System.Windows.Forms.PaintEventArgs e){ RePaintPanel();}private void RePaintPanel(){ DrawingImage.Dispose(); DrawingImage = new Bitmap(this.pnlFlow.ClientRectangle.Width,this.pnlFlow.ClientRectangle.Height); Graphics g = Graphics.FromImage (DrawingImage); g.SmoothingMode = SmoothingMode.AntiAlias; Brush BrushTemp = new SolidBrush(this.pnlFlow.BackColor); Pen p = new Pen(Color.Black, 1); g.FillRectangle(BrushTemp, this.pnlFlow.ClientRectangle); for(RegionNode n = RegionHead; n !=null; n = n.next) { g.DrawLine(p,n.startPoint,n.endPoint); this.DrawArrow(g,p,n.startPoint,n.endPoint); } // Disposing p.Dispose(); BrushTemp.Dispose(); g.Dispose(); //DrawImgOnPanel(DrawingImage);} 他们的意思是说,要你把画图写成一个函数,每次拖动滚动条的时候(即滚动条发生改变的事件)都调用该函数对form进行重化。 在第一次画完之后,将其保存为后台bitmap,然后在paint事件中把bitmap调出来就可以了 click事件中画直线后,应该在以后的paint事件中画同样的一条这样滚动就不会有问题的也就是说所有绘图都放在paint里面的话,不管是滚动还是改变大小都不会不见的啊. 拖动滚动条的时候系统会自动调用OnPaint进行重绘,就把你先前画的线覆盖掉了你可以定义一个关于线的类或者结构,把所画的每条线作为一个对象保存起来,然后在OnPaint函数里添加重绘所有线条对象的操作,就可以避免被擦除了。 首先.使用滚动条滚动的时候,并不是所有的都需要重新能绘制,有部分Window自己搞定了,你只要绘制需要绘制的部分就可以了,大家可以反编译DataGrid组件的源码看看就可以了。在system.windows.forms.dll中,反编译器net reflactor c# 请教如何把DateTime转换为float 项目可行性研究 招聘WEB开发工程师 待遇4500--5000/月,地点 北京 C#,获取电子秤重量,通过USB接口 谁有类似ComboBox控件的源码? 谁会X-11季节调整算法?! 机房管理系统客户端启动慢 新手提问。。。哪里该用; 那里有BO可以下载(business object)。 请教一下下面的这几句代码? 高分求教NumericUpDown问题 Visual studio 2005 预览版 BT 下载(2.7G)
{
RePaintPanel();
}
private void RePaintPanel()
{
DrawingImage.Dispose();
DrawingImage = new Bitmap(this.pnlFlow.ClientRectangle.Width,this.pnlFlow.ClientRectangle.Height); Graphics g = Graphics.FromImage (DrawingImage);
g.SmoothingMode = SmoothingMode.AntiAlias;
Brush BrushTemp = new SolidBrush(this.pnlFlow.BackColor);
Pen p = new Pen(Color.Black, 1);
g.FillRectangle(BrushTemp, this.pnlFlow.ClientRectangle); for(RegionNode n = RegionHead; n !=null; n = n.next)
{ g.DrawLine(p,n.startPoint,n.endPoint);
this.DrawArrow(g,p,n.startPoint,n.endPoint);
}
// Disposing
p.Dispose();
BrushTemp.Dispose();
g.Dispose(); //DrawImgOnPanel(DrawingImage);
}
然后在paint事件中把bitmap调出来就可以了
你可以定义一个关于线的类或者结构,把所画的每条线作为一个对象保存起来,
然后在OnPaint函数里添加重绘所有线条对象的操作,就可以避免被擦除了。
在system.windows.forms.dll中,反编译器net reflactor