在Form_Load中初始化的类,在combobox_textChange里提示未将对象引用设置到对象的实例。

问题描述

是一个贪吃蛇游戏出问题的是snake类和Obstacle类usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;usingSystem.IO;namespacetheSnake{publicpartialclassForm1:Form{publicstructnode{publicintx;publicinty;}//方向枚举enumdirect:int{up=1,down,left,right}publicclassSettings{publicstaticstringfloorType{get;set;}publicstaticintheadx{get;set;}publicstaticintheady{get;set;}publicstaticintdirection{get;set;}}Snakesnake;Obstacleobstacle;publicLabel[,]lbl=newLabel[20,20];intinterval=500;//timer间隔-->控制蛇的速度intdirection=Settings.direction;//移动方向,右intcurrentLength=3;//当前蛇长intcntGrid=20;//格子数intgridWidth=15;boolisGameOver=true;//游戏是否结束//boolisOkInput=true;publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){initGrid();comboBox1.Text=comboBox1.Items[0].ToString();initSettings(comboBox1.Text);snake=newSnake(lbl);snake.initSnake(lbl);obstacle=newObstacle(lbl);//obstacle.initObstacle(lbl);}//初始化设置voidinitSettings(stringmapType){stringsPath=Application.StartupPath;stringline="";string[]parts;StreamReadersr=newStreamReader(sPath+"\maze.txt",Encoding.Default);//初始化setsSettings.headx=Settings.heady=Settings.direction=0;Settings.floorType="";while(!sr.EndOfStream){line=sr.ReadLine();parts=line.Split(',');if(parts[0]==("""+mapType+"""))//记得转义字符!{Settings.floorType=mapType;Settings.heady=int.Parse(parts[1]);Settings.headx=int.Parse(parts[2]);Settings.direction=int.Parse(parts[3]);}}sr.Close();}//初始化格子privatevoidinitGrid(){this.panel1.Controls.Clear();for(inti=0;i<cntGrid;i++){for(intj=0;j<cntGrid;j++){//主要方法:system.drawinglbl[i,j]=newSystem.Windows.Forms.Label();lbl[i,j].Location=newSystem.Drawing.Point(i*(gridWidth+3)+10,j*(gridWidth+3)+10);lbl[i,j].Size=newSystem.Drawing.Size(gridWidth,gridWidth);lbl[i,j].BackColor=Color.Silver;//背景格子颜色this.panel1.Controls.Add(lbl[i,j]);//主要方法:在panel里画label}}lbl[1,2].BackColor=Color.Red;}privatevoidcomboBox1_TextChanged(objectsender,EventArgse){initSettings(comboBox1.Text);obstacle=newObstacle(lbl);//snake=newSnake(lbl);如果在这初始化就没事obstacle.initObstacle(lbl);snake.initSnake(lbl);//此处出错}privatevoidcomboBox1_SelectedIndexChanged(objectsender,EventArgse){initSettings(comboBox1.Text);obstacle=newObstacle(lbl);snake=newSnake(lbl);//obstacle.initObstacle(lbl);snake.initSnake(lbl);}}publicclassSnake{//蛇身节点publicstructnode{publicintx;publicinty;}publicintlength{get;set;}//蛇长度publicLinkedList<node>snake;//蛇身所有节点publicLinkedListNode<node>searchNode;//查找节点(指针!)publicnodenewNode;//新节点,加入头部publicLinkedListNode<node>tailNode;//尾节点,用于删除Randomrnd;//随机函数publicintcntGrid;//格子个数publicboolisSnakeAlive;//蛇是否活着publicLinkedList<node>obstacle;//所有障碍物publicnodenewObstacle;//新障碍物publicnodestartHead;//蛇初始化位置//蛇头坐标publicclasshead{publicstaticintx{get;set;}//设置属性读取{get;set;}publicstaticinty{get;set;}}//食物类publicclassfood{publicstaticintx;//食物的x坐标publicstaticinty;//食物的y坐标publicstaticboolisFoodAte;//是否被吃}//蛇类主构造函数publicSnake(Label[,]lbl){cntGrid=20;//格子数cnGrid*cnGridlength=3;//蛇长度rnd=newRandom();//随机数food.isFoodAte=true;//蛇身链表snake=newLinkedList<node>();//障碍物链表obstacle=newLinkedList<node>();//初始化3个新的节点nodes1,s2,s3;s1.y=s2.y=s3.y=Form1.Settings.heady;s1.x=Form1.Settings.headx-2;s2.x=Form1.Settings.headx-1;s3.x=Form1.Settings.headx;//加入蛇身链表snake.AddFirst(s1);snake.AddFirst(s2);snake.AddFirst(s3);lbl[s1.x,s1.y].BackColor=Color.FromArgb(150,206,84);//画蛇身lbl[s2.x,s2.y].BackColor=Color.FromArgb(150,206,84);head.x=s3.x;head.y=s3.y;lbl[head.x,head.y].BackColor=Color.FromArgb(12,137,24);//画蛇头isSnakeAlive=true;}publicvoidinitSnake(Label[,]lbl){//清除已有的蛇、食物searchNode=snake.First;//找到头结点while(searchNode!=snake.Last){lbl[searchNode.Value.x,searchNode.Value.y].BackColor=Color.Silver;searchNode=searchNode.Next;}lbl[searchNode.Value.x,searchNode.Value.y].BackColor=Color.Silver;snake.Clear();lbl[food.x,food.y].BackColor=Color.Silver;//创建新的蛇、食物food.isFoodAte=true;length=5;//初始时蛇身长度为3nodes1,s2,s3;s1.y=s2.y=s3.y=Form1.Settings.heady;s1.x=Form1.Settings.headx-2;s2.x=Form1.Settings.headx-1;s3.x=Form1.Settings.headx;//s1.y=s2.y=s3.y=startHead.y;//s1.x=startHead.x-2;s2.x=startHead.x-1;s3.x=startHead.x;snake.AddFirst(s1);snake.AddFirst(s2);snake.AddFirst(s3);lbl[s1.x,s1.y].BackColor=Color.FromArgb(150,206,84);//画蛇身lbl[s2.x,s2.y].BackColor=Color.FromArgb(150,206,84);head.x=s3.x;head.y=s3.y;lbl[head.x,head.y].BackColor=Color.FromArgb(12,137,24);//画蛇头isSnakeAlive=true;}}publicclassObstacle{publicstructnode{publicintx;publicinty;}publicLinkedList<node>obstacle;//障碍物链表publicLinkedListNode<node>searchNode;//查找节点(指针!)publicnodenewNode;//新节点,加入头部publicLinkedListNode<node>tailNode;//查找尾节点publicObstacle(Label[,]lbl){obstacle=newLinkedList<node>();initObstacle(lbl);//初始化障碍物}//初始化障碍物publicvoidinitObstacle(Label[,]lbl){stringsPath=Application.StartupPath;stringline="";string[]parts;//清空原地图searchNode=obstacle.First;//找到头结点while(searchNode!=obstacle.Last){lbl[searchNode.Value.x,searchNode.Value.y].BackColor=Color.Silver;searchNode=searchNode.Next;}if(searchNode!=null){lbl[searchNode.Value.x,searchNode.Value.y].BackColor=Color.Silver;}obstacle.Clear();//清空障碍物链表//画地图StreamReadersr=newStreamReader(sPath+"\maze.txt",Encoding.Default);while(!sr.EndOfStream){line=sr.ReadLine();parts=line.Split(',');if(parts[0]==("""+Form1.Settings.floorType+"""))//记得转义字符!{for(inti=0;i<20;i++){stringline2=sr.ReadLine();string[]parts2=line2.Split(',');for(intj=0;j<20;j++){if(parts2[j]=="1"){//为障碍物lbl[j,i].BackColor=Color.FromArgb(178,93,37);//画障碍物newNode.x=j;newNode.y=i;obstacle.AddFirst(newNode);}}}}}sr.Close();}}}

解决方案

本帖最后由 sinat_32612651 于 2015-12-23 16:32:59 编辑
解决方案二:
comboBox1.Text=comboBox1.Items[0].ToString();这句丢到初始化后面执行
解决方案三:
未将对象引用设置到对象的实例,无外乎有个东东为null呗。目测窗体载入事件,comboBox1的TextChanged事件触发时,snake还为实例化(也就是为null)。
解决方案四:
窗体构造调用InitializeComponent()方法时会触发comboBox1_SelectedIndexChanged这个事件,此时你有些对象还未初始化就会导致null引用,另外你这句comboBox1.Text=comboBox1.Items[0].ToString();有点醉,是不是太绕了?
解决方案五:
你在最外面这么声明就可以了Snakesnake=newSnake();因为你一开始只是Snakesnake这个等价于Snakesnake=null而null并不是实例化的意思

时间: 2024-09-14 19:23:20

在Form_Load中初始化的类,在combobox_textChange里提示未将对象引用设置到对象的实例。的相关文章

ASP.NET 中aspx文件的TextBox在aspx.cs文件中无法被引用,提示未将对象引用设置到对象的实例。

问题描述 ASP.NET中aspx文件的TextBox在aspx.cs文件中无法被引用,提示未将对象引用设置到对象的实例.vs2012 解决方案 解决方案二:既然可以执行,说明变量有定义.你自己定义了变量?解决方案三:在vs工具上,你的代码,点击鼠标右键,你可以看到许多调试开发工具功能,例如各种"重构",还有"查看定义"."查找所有引用"等等.要想找到一个变量的定义是不是有歧义,你得直接借助这些工具找到其定义的地方.如果不会使用vs开发工具,那么

vb.net 调用c#类库中返回值为datatable的函数,老是提示未将对象引用设置到对象的实例

问题描述 如题,是什么问题.c#CPAOrderDate.csusingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Linq;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.HtmlControls;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebCo

c#中创建Mat类数组,出现未将对象引用设置到对象的实例

问题描述 本身并不是很懂c#,但是老师的要求,没法拒绝,只能硬着头皮上,问题如下:开发环境是vs2010+emgucv,创建了一个Mat类,但是总出现未将对象引用设置到对象的实例,各位大神,求救啊~~~~~代码片段如下:Mat[]img=null;privatevoidbutton2_Click(objectsender,EventArgse){if(img1!=null){//img2=newMat(img1.Rows,img1.Cols,Emgu.CV.CvEnum.DepthType.Cv

“/”应用程序中的服务器错误。 未将对象引用设置到对象的实例。请大侠帮忙一下

问题描述 "/"应用程序中的服务器错误.未将对象引用设置到对象的实例.说明:执行当前Web请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息.异常详细信息:System.NullReferenceException:未将对象引用设置到对象的实例.源错误:执行当前Web请求期间生成了未处理的异常.可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息.堆栈跟踪:[NullReferenceException:未将对象引用设置到对象的

string-c#中未将对象引用设置到对象的实例。改了好久改不来 求大神指导

问题描述 c#中未将对象引用设置到对象的实例.改了好久改不来 求大神指导 private void butkeyverify_Click(object sender, EventArgs e) { try { byte a, b; string c = null; //生成密钥类型 { if (cmbkeytype.SelectedValue.ToString() == "密钥A") { a = 0x60; } else { a = 0x61; } } //生成扇区号 { if (cm

datagridview中删除行或列时怎么总是提示未将对象引用设置添加到对象的实例

问题描述 datagridview中删除行或列时怎么总是提示未将对象引用设置添加到对象的实例未绑定数据库,只是动态添加行,动态删除行,不知为什么总是提示未将对象引用设置添加到对象的实例,但删除效果正常,为什么?请大神解答dataGridView1.Rows.RemoveAt(0); 解决方案 解决方案二:说明某个属性为null,进而又对其进行了操作.解决方案三:执行dataGridView1.Rows.RemoveAt(0);之前,你应该先判断dataGridView1.Rows.Count没有

未将对象引用设置到对象的实例。“/OLSCS”应用程序中的服务器错误。

问题描述 行23:publicDataBase()行24:{行25:ConnectionString=ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;行26:}行27:源文件:f:作业提交系统原程序OLSCSApp_CodeDataAccessLayerDataBase.cs行:25堆栈跟踪:[NullReferenceException:未将对象引用设置到对象的实例.]OLBSJS

C#开发中未将对象引用设置到对象的实例

问题描述 解决方案 解决方案二:希望各位前辈帮忙看看该问题如何处理解决方案三:你就调试查看哪个变量为null1.给modDoc赋值有可能返回的是null,下边在调用modDoc.InsertSketch2(true),就抛异常了2.也有可能modDoc.InsertSketch2方法里有变量没有赋值第一种原因的概率大解决方案四:引用2楼yuankaiwsl的回复: 你就调试查看哪个变量为null1.给modDoc赋值有可能返回的是null,下边在调用modDoc.InsertSketch2(tr

求解WSE中“未将对象引用设置到对象的实例”的问题

问题描述 小弟最近学WebService+WSE,在确认用户角色的时候出现这样的问题,请各位大哥帮忙解决啊,谢谢了publicvoidAuthorize(stringrole){IPrincipalp=RequestSoapContext.Current.Credentials.UltimateReceiver.GetClientToken<UsernameToken>().Principal;if(null!=p&&p.IsInRole(role)){return;}else