我想在C#中的WinForms使用BindingList
作为DataSource
的ListBox
,但每当我尝试添加项目到BindingList
时抛出ArgumentOutOfRangeException,我得到抛出的ArgumentOutOfRangeException
。下面的代码演示了此问题(假设形式ListBox listBox1
):列表框添加到数据源
BindingList<string> dataSource = new BindingList<string>();
listBox1.DataSource = dataSource;
dataSource.Add("Test1"); // Exception, here.
注意,如果dataSource
中已经有项目,我没有得到异常:
BindingList<string> dataSource = new BindingList<string>();
dataSource.Add("Test1");
listBox1.DataSource = dataSource;
dataSource.Add("Test2"); // Appears to work correctly.
我可以解决通过在添加项目之前将DataSource
属性设置为null
并在之后重新设置DataSource
,但感觉像是黑客,我希望能够避免这样做。
在ListBox
上使用空的DataSource
是否存在(非黑客)方法,以便向其添加项目不会引发异常?
编辑:堆栈跟踪:
System.Windows.Forms.dll的System.Windows.Forms.ListBox.SelectedIndex.set(INT 值)+为0x1EC字节
System.Windows。 Forms.dll!System.Windows.Forms.ListControl.DataManager_PositionChanged(object sender,System.EventArgs e)+ 0x2e bytes
System.Windows.Forms.dll!System.Windows.Forms.CurrencyManager.OnPositionChanged(System.EventArgs e)+ 0x39字节
System.Windows.Forms.dll的!System.Windows.Forms.CurrencyManager.ChangeRecordState(INT 在newPosition,布尔验证,布尔 endCurrentEdit,布尔 firePositionChange,布尔pullData)+ 0x14f字节
System.Windows.Forms的。 dll的!System.Windows.Forms.CurrencyManager.List_ListChanged(对象 发件人, System.ComponentModel.ListChangedEventArgs E)+ 0x2e4字节
System.dll中!System.ComponentModel.BindingList.OnListChanged(System.ComponentModel.ListChangedEventArgs E) + 0x17字节
System.dll!System.ComponentModel.BindingList.FireListChang ED(System.ComponentModel.ListChangedType 类型,INT指数)+ 0x35字节
System.dll中!System.ComponentModel.BindingList.InsertItem(INT 索引,系统_ 佳能项)+ 0x3F的 字节
mscorlib.dll中!System.Collections.ObjectModel.Collection.Add(系统。 _Canon 项)+ 0x76字节
没有repro,发布异常的堆栈跟踪。 – 2010-12-20 20:15:23
我感觉有点愚蠢 - 这是.Net在内部处理的一个例外;我的调试器被设置为触发所有抛出的异常。下一次,我会确保“继续”,直到遇到实际的崩溃。 – TreDubZedd 2010-12-20 21:17:02