ListBox.Items.Clear未将对象引用设置到对象的实例

问题描述

写了一个日志窗口logForm,包含一个ListBox显示日志内容,当日志满200行的清除所有内容,但是报错,提示未将对象引用设置到对象的实例代码如下:if(this.logForm.listBoxLog.Items.Count>200)this.logForm.listBoxLog.Items.Clear();

解决方案

解决方案二:
单步调试一下,看看那个是null。目测是this.logForm.listBoxLog.Items
解决方案三:
不是时时都出现,软件一直运行,都是晚上十一点多,或者凌晨一点多出现错误
解决方案四:
引用1楼u011303459的回复:

单步调试一下,看看那个是null。目测是this.logForm.listBoxLog.Items

[目测是this.logForm.listBoxLog.Items]去掉
解决方案五:
都是深夜这么奇怪?是否记录与时间跨度相关的东西了?
解决方案六:
目测是内存的问题
解决方案七:
this.logForm.listBoxLog.Items.Clear();这句话有没有执行呢,按照道理上面已经加了判断了,不会报错的。
解决方案八:
测试没有任何问题
解决方案九:
而且还纳闷地一点是,先判断了数量大于200行才执行的,应该不会null啊
解决方案十:
日志记录的内容,和时间跨度没有什么关系this.logForm.listBoxLog.BeginUpdate();this.logForm.listBoxLog.Items.Add(DateTime.Now.ToString()+":"+logContent);this.logForm.listBoxLog.EndUpdate();this.logForm.listBoxLog.SelectedIndex=this.logForm.listBoxLog.Items.Count-1;
解决方案十一:
现在又出现了这种问题,不知道哪里有问题
解决方案十二:
this.logForm.listBoxLog.SelectedIndex=this.logForm.listBoxLog.Items.Count-1;这句有问题。COUN-1.INDEX.
解决方案十三:
这里确实会引发错误,但是错误日志提示的位置不在这里privatevoidOutPutLogs(LogLevellogLevel,stringlogContent){lock(this){switch(logLevel){caseLogLevel.Info:this.logForm.listBoxLog.BeginUpdate();this.logForm.listBoxLog.Items.Add(DateTime.Now.ToString()+":"+logContent);this.logForm.listBoxLog.EndUpdate();if(this.logForm.listBoxLog.Items.Count>0)this.logForm.listBoxLog.SelectedIndex=this.logForm.listBoxLog.Items.Count-1;break;default:break;}}}
解决方案十四:
2014-6-311:38:19:线程异常:未将对象引用设置到对象的实例。StackTrace:在System.Windows.Forms.ListBox.ItemArray.GetActualIndex(Int32virtualIndex,Int32stateMask)在System.Windows.Forms.ListBox.ItemArray.GetItem(Int32virtualIndex,Int32stateMask)在System.Windows.Forms.ListBox.SelectedObjectCollection.get_Item(Int32index)在System.Windows.Forms.ListBox.get_SelectedItem()在System.Windows.Forms.ListBox.get_Text()在System.Windows.Forms.Control.OnHandleDestroyed(EventArgse)在System.Windows.Forms.ListBox.OnHandleDestroyed(EventArgse)在System.Windows.Forms.Control.WmDestroy(Message&m)在System.Windows.Forms.Control.WndProc(Message&m)在System.Windows.Forms.ListBox.WndProc(Message&m)在System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&m)在System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&m)在System.Windows.Forms.NativeWindow.Callback(IntPtrhWnd,Int32msg,IntPtrwparam,IntPtrlparam)我加快了日志的记录和显示,在自己电脑上还是没有重现这个问题,今天又在同事的电脑上测试出来了,上面是捕获的错误日志
解决方案十五:
如果我说无解你信吗?我有一个程序exe一直在运行..同样的也是listbox添加日志..代码跟你差不多也是清除日志..甚至我添加了右键清除..listBox1.Items.Clear();

就这代码运行了一段时间就有问题..不管是大于200或者按钮清除.就是null...实际上就算listbox1没有任何东西的时候这句也不会有问题..但是就是这点运行一段时间...所以我个人认为是无解...希望借用你的帖子找到解决问题的方法..
解决方案:
推荐采用异步委托方式privatevoidOutPutLogs(LogLevellogLevel,stringlogContent){lock(this){switch(logLevel){caseLogLevel.Info:showLst(logContent);break;default:break;}}}//采用异步委托方式privatedelegatevoidAsyncCallBack(stringcontents);privatevoidshowLst(stringlogContent){if(this.logForm.listBoxLog.InvokeRequired){AsyncCallBackasy=newAsyncCallBack(showLst);this.Invoke(asy,logContent);return;}else{this.logForm.listBoxLog.BeginUpdate();this.logForm.listBoxLog.Items.Add(DateTime.Now.ToString()+":"+logContent);this.logForm.listBoxLog.EndUpdate();if(this.logForm.listBoxLog.Items.Count>0)this.logForm.listBoxLog.SelectedIndex=this.logForm.listBoxLog.Items.Count-1;}}
解决方案:
引用14楼diaodiaop的回复:

如果我说无解你信吗?我有一个程序exe一直在运行..同样的也是listbox添加日志..代码跟你差不多也是清除日志..甚至我添加了右键清除..listBox1.Items.Clear();

就这代码运行了一段时间就有问题..不管是大于200或者按钮清除.就是null...实际上就算listbox1没有任何东西的时候这句也不会有问题..但是就是这点运行一段时间...所以我个人认为是无解...希望借用你的帖子找到解决问题的方法..

今天出现这个错误的时候,我打开logForm,里面什么东西都没有,而滚动条只滑到一半
解决方案:
http://social.msdn.microsoft.com/Forums/en-US/8ab8e6d7-098e-4ff5-8cae-8ded5b31acf8/nativewindowcallback-and-windows-forms-timer
解决方案:
不知道是不是和这个有关系NativeWindow.CallbackandWindowsFormsTimer
解决方案:
我也遇到了这个问题,经过试验,估计找到了原因。虽然这个帖子已经很古老了,但是我相信还会有后来人像我们一样遇到这个问题。所以我把我找到的原因和解决过程写下来。出现这个问题的原因是ListBox控件的Selected系列属性(SelectedIndex,SelectedItem)。当你控件中的选项被选中过(即SelectedIndex不为-1,SelectedItem不为null)后,如果你删除被选中的项,或者将SelectedIndex设置为-1,或者将SelectedItem设置为null,或者使用SetSelected函数将被选中的项设置为false,均会出现这个错误。也就是说,ListBox控件一旦有子项被选中,那么必须一直有选中项,你可以改变选中项,但是不能取消选中项。如果你删除不是SelectedIndex指定的项,则不会出现问题。解决问题的思路:如果你要删除SelectedIndex指定的项,可以首先修改SelectedIndex值,然后再删除:1、如果SelectedIndex不是最后一项,将其修改为SelectedIndex+1;2、如果SelectedIndex是最后一项,且总项数量不为1,将其修改为SelectedIndex-1;3、如果总项数量为1,则使用Clear清空代码如下:intindex=listBox.SelectedIndex;if(index<0)return;elseif(index<listBox.Items.Count-1){listBox.SelectedIndex=index+1;listBox.Items.Remove(listBox.Items[index]);}elseif(index>0){listBox.SelectedIndex=index-1;listBox.Items.Remove(listBox.Items[index]);}else{listBox.Items.Clear();}当然更简单的方法是使用try,不去管报错。我的方法比较笨,如果你有更好的方法,请写下来,大家一起研究。
解决方案:
收藏了。谢谢。

时间: 2024-08-01 16:40:06

ListBox.Items.Clear未将对象引用设置到对象的实例的相关文章

在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;names

提示未将对象引用设置到对象的实例。

问题描述 公共类:usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;usingSystem.Data.OleDb;

RadioButtonList赋值操作时报&amp;amp;quot;未将对象引用设置到对象的实例&amp;amp;quot;的错。

问题描述 我在程序中:RadioButtonList_ipsnsex.Items.FindByValue(ds.Tables["Insurance"].Rows[0]["ipsn_sex"].ToString()).Selected=true;code]报错信息为:"未将对象引用设置到对象的实例"但是[code=C#]RadioButtonList_ipsnsex.Items.FindByValue("男"].ToString

treeview 动态 tag-treeView 动态显示菜单 未将对象引用设置到对象的实例

问题描述 treeView 动态显示菜单 未将对象引用设置到对象的实例 #region 将MenuStrip控件中的信息添加到treeView控件中 /// /// 读取菜单中的信息. /// /// TreeView控件 /// MenuStrip控件 public void GetMenu(TreeView treeV, MenuStrip MenuS) { for (int i = 0; i < MenuS.Items.Count; i++) //遍历MenuStrip组件中的一级菜单项

关于VB.NET(未将对象引用设置到对象的实例)求就求救,哪位仁兄帮忙看看

问题描述 未将对象引用设置到对象的实例.说明:执行当前Web请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息.异常详细信息:System.NullReferenceException:未将对象引用设置到对象的实例.源错误:行46:DS.Clear()行47:DS=GetDataFromDB(sqlstr)行48:IfDS.Tables(0).Rows.Count>0Then行49:sqlstr="select*fromuserIDwhere

未将对象引用设置到对象的实例。

问题描述 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)就别执行了 改了之

错误解决:System.NullReferenceException: 未将对象引用设置到对象的实例

在ASP.NET开发中,遇到System.NullReferenceException: 未将对象引用设置到对象的实例的错误提示,解决方法如下:       (1)所设置的变量为空值或没有取到值,一般出现在传递参数的时候出现这个问题,也会在使用datagrid或gridview或datalist等数据控件时出现. (2)控件名称与codebehind里面的没有对应 (3)未用new初始化对象 (4)在程序中所引用的控件不存在 解决方法: (1)使用try..catch...finally捕捉错误

在win7 64位下出现异常:未将对象引用设置到对象的实例

  您好,win7的确有这个问题,已经反馈给作者,其实很多.net写的应用会出现这样的错误,然后无视它的话,能继续用就好了,这个似乎不行. 电脑模拟乐器软件1.20 绿色版"在win7 64位下出现异常:未将对象引用设置到对象的实例.具体情况如下:‍ ************** 异常文本 ************** ************** 已加载的程序集 ************** mscorlib 程序集版本: 2.0.0.0 Win32 版本: 2.0.50727.5477 (W

链接数据库时,对文件操作造成脚本异常:未将对象引用设置到对象的实例,感觉是代码出了问题

问题描述 链接数据库时,对文件操作造成脚本异常:未将对象引用设置到对象的实例,感觉是代码出了问题 第一次对文件进行操作,只是简单的添加照片而已,不知道问题出在那里,当我把操作文件那块代码注释后,其他功能都是正常的,代码如下: string fileExtesion = Path.GetExtension(FileUpload1.PostedFile.FileName).ToLower(); if (FileUpload1.HasFile) { string path = Server.MapPa