我想在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