问题描述
Pointtemp=newPoint();for(intk=0;k<picbox.Width/5-1;k++){temp=ptlist[k+1];ptlist[k]=newPoint(temp.X-5,temp.Y);}出线错误:未将对象引用设置到对象的实例。是怎么回事儿?
解决方案
解决方案二:
if(ptlist==null)就别执行了
解决方案三:
先检查ptlist是否为null,在执行
解决方案四:
引用1楼net_lover的回复:
if(ptlist==null)就别执行了
改了之后又报下一句错,未将对象引用设置到对象的实例
解决方案五:
该回复于2011-12-06 13:18:10被版主删除
解决方案六:
还是有这个错误,谁能帮帮我,急……………………
解决方案七:
还是从根上分析吧。也许,你定义的数组太小,循环变量太大。你也不贴出代码,光那两行,谁知道哪里错了。
解决方案八:
你看一下报错那一步是ptlist里面哪个对象
解决方案九:
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Drawing;usingSystem.Windows.Forms;namespaceWindowsFormsApplication1{classdraw{publicBitmapmybitmap;//用于双缓冲的位图,和画布等大Randomrm=newRandom();//随机数产生器publicvoidDrawLineS(Colorcolor,floatXmax,floatYmax,PictureBoxpicbox,Point[]ptlist){mybitmap=newBitmap(picbox.Width,picbox.Height);//设定位图大小Graphicsdoublebufferg=Graphics.FromImage(mybitmap);//从位图上获取“画布”doublebufferg.Clear(Color.White);//用背景色刷新//pictureBox1填充为白色,便于显示图像500*300Rectanglerect=newRectangle(0,0,picbox.Width,picbox.Height);doublebufferg.FillRectangle(newSolidBrush(Color.White),rect);//画X和Y轴DrawXY(refdoublebufferg,picbox);//X轴上的刻度SetYAxis(refdoublebufferg,picbox,Ymax);//Y轴上的刻度SetXAxis(refdoublebufferg,picbox,Xmax);//要显示的实时曲线部分Pointtemp=newPoint();for(intk=0;k<picbox.Width/5-1;k++){temp=ptlist[k+1];ptlist[k]=newPoint(temp.X-5,temp.Y);}Pointlastpt=newPoint();lastpt.X=picbox.Width;lastpt.Y=picbox.Height;//lastpt.Y=rm.Next(DateTime.Now.Millisecond)%picbox.Height;ptlist[picbox.Width/5-1]=lastpt;doublebufferg.DrawLines(newPen(color,1),ptlist);//将缓冲中的位图绘制到我们的窗体上Graphicsg1=picbox.CreateGraphics();//创建PictureBox窗体的画布g1.Clear(Color.White);g1.DrawImage(mybitmap,0,0);}//完成X轴和Y轴的基本部分publicvoidDrawXY(refGraphicsg,PictureBoxpicbox){Penpen=newPen(Color.Black,2);//画笔SolidBrushsb=newSolidBrush(Color.Black);//话刷//X轴的箭头,实际上是绘制了一个三角形Point[]xpts=newPoint[3]{newPoint(picbox.Width-35,picbox.Height-32),newPoint(picbox.Width-35,picbox.Height-28),newPoint(picbox.Width-30,picbox.Height-30)};g.DrawLine(pen,30,picbox.Height-30,picbox.Width-30,picbox.Height-30);g.DrawPolygon(pen,xpts);g.DrawString("X",newFont("宋体",9),sb,picbox.Width-25,picbox.Height-35);//Y轴的箭头,实际上是绘制了一个三角形Point[]ypts=newPoint[3]{newPoint(28,35),newPoint(30,30),newPoint(32,35)};g.DrawLine(pen,30,picbox.Height-30,30,30);g.DrawPolygon(pen,ypts);g.DrawString("Y",newFont("宋体",9),sb,15,30);}//绘制Y轴上的刻度publicvoidSetYAxis(refGraphicsg,PictureBoxpicbox,floatYMAX){Penp1=newPen(Color.Goldenrod,1);Penp2=newPen(Color.Black,2);SolidBrushsb=newSolidBrush(Color.Black);floatykedu=YMAX/200;//给定的最大刻度与实际像素的比例关系//第一个刻度的两个端点floatxl=27,yl=picbox.Height-30,xr=33,yr=picbox.Height-30;for(intj=0;j<picbox.Height-60;j+=10){if(j%50==0)//一个大的刻度,黑色,每隔50像素一个{g.DrawLine(p2,xl,yl-j,xr,yl-j);//刻度线stringtempy=(j*ykedu).ToString();g.DrawString(tempy,newFont("宋体",8),sb,xl-20,yl-j-5);}else//小刻度,金黄色,10像素一个{g.DrawLine(p1,xl,yl-j,xr,yl-j);}}}//绘制y轴上的刻度publicvoidSetXAxis(refGraphicsg,PictureBoxpicbox,floatXMAX){Penp1=newPen(Color.Goldenrod,1);Penp2=newPen(Color.Black,2);SolidBrushsb=newSolidBrush(Color.Black);floatxkedu=XMAX/400;floatxt=30,yt=picbox.Height-33,xb=30,yb=picbox.Height-27;for(inti=0;i<picbox.Width-60;i+=10){if(i%50==0){g.DrawLine(p2,xt+i,yt,xb+i,yb);stringtempx=(i*xkedu).ToString();g.DrawString(tempx,newFont("宋体",8),sb,xt+i-7,picbox.Height-25);}else{g.DrawLine(p1,xt+i,yt,xb+i,yb);}}}}}以上是一个画图类draw.cs下面是我窗体中的代码,点击按钮出线一条实时曲线usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceWindowsFormsApplication1{publicpartialclassForm8:Form{publicForm8(){InitializeComponent();}publicPoint[]ptlist;//存放点的数组Randomrm=newRandom();//随机数产生器Timermytimer=newTimer();//定时器privatevoidForm8_Load(objectsender,EventArgse){//设置控件的样式和行为,以减少图像的闪烁this.SetStyle(ControlStyles.OptimizedDoubleBuffer|ControlStyles.AllPaintingInWmPaint|ControlStyles.UserPaint,true);this.SetStyle(ControlStyles.ResizeRedraw,true);this.UpdateStyles();//实例化数组ptlist=newPoint[this.pictureBox5.Width/5];Pointpt;for(inti=0;i<this.pictureBox5.Width/5;i++){pt=newPoint();pt.X=5*i;//5个像素绘制一个点//pt.Y=rm.Next()%this.pictureBox1.Height;if(5*i<150)pt.Y=80;elsept.Y=80+(5*i-150)*1/2;ptlist[i]=pt;}}drawdrawtest=newdraw();//创建类draw的实例privatevoidtimer1_Tick(objectsender,EventArgse){//调用绘图函数,这里的参数可以根据不同的测量给定不同的实参drawtest.DrawLineS(Color.Blue,32000,450,pictureBox1,ptlist);}privatevoidbutton1_Click(objectsender,EventArgse){//动态添加一个定时器this.timer1.Enabled=true;//可以使用this.timer1.Interval=1000;//定时时间为1000毫秒this.timer1.Tick+=newSystem.EventHandler(this.timer1_Tick);this.timer1.Start();//启动定时器}}}求高手给我看看哪儿错了……
解决方案十:
你调试看一下哪次循环除了问题呗
解决方案十一:
我运行了,在一个project里可以运行没问题,但是我把代码加到另一个大的project里面就会出现这个错误,我也不知道是怎么回事……急死了……………………………………
解决方案十二:
自己学着调试,在出错的地方加断点,然后监视查看哪个变量为null
解决方案十三:
ptlist里面的内容出了问题你在循环的地方设个断点看看检查是哪个对象为null
解决方案十四:
该回复于2011-12-06 16:01:39被版主删除